/[MITgcm]/MITgcm/verification/tutorial_global_oce_latlon/code/ptracers_forcing_surf.F
ViewVC logotype

Diff of /MITgcm/verification/tutorial_global_oce_latlon/code/ptracers_forcing_surf.F

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

revision 1.5 by jmc, Mon Nov 5 19:27:02 2007 UTC revision 1.6 by jmc, Sun Sep 5 22:32:48 2010 UTC
# Line 8  C !ROUTINE: PTRACERS_FORCING_SURF Line 8  C !ROUTINE: PTRACERS_FORCING_SURF
8    
9  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
10        SUBROUTINE PTRACERS_FORCING_SURF(        SUBROUTINE PTRACERS_FORCING_SURF(
11         I                            relaxForcingS,
12       I                            bi, bj, iMin, iMax, jMin, jMax,       I                            bi, bj, iMin, iMax, jMin, jMax,
13       I                            myTime,myIter,myThid )       I                            myTime,myIter,myThid )
14    
# Line 23  C !USES: =============================== Line 24  C !USES: ===============================
24  #include "PARAMS.h"  #include "PARAMS.h"
25  #include "GRID.h"  #include "GRID.h"
26  #include "SURFACE.h"  #include "SURFACE.h"
27    #include "DYNVARS.h"
28  #include "FFIELDS.h"  #include "FFIELDS.h"
 c #include "DYNVARS.h"  
29  #include "PTRACERS_SIZE.h"  #include "PTRACERS_SIZE.h"
30  #include "PTRACERS_PARAMS.h"  #include "PTRACERS_PARAMS.h"
31  #include "PTRACERS_FIELDS.h"  #include "PTRACERS_FIELDS.h"
32    
33  C !INPUT PARAMETERS: ===================================================  C !INPUT PARAMETERS: ===================================================
34    C  relaxForcingS        :: Salt forcing due to surface relaxation
35  C  bi,bj                :: tile indices  C  bi,bj                :: tile indices
36  C  myTime               :: model time  C  myTime               :: model time
37  C  myIter               :: time-step number  C  myIter               :: time-step number
38  C  myThid               :: thread number  C  myThid               :: thread number
39          _RL relaxForcingS(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
40        INTEGER bi, bj, iMin, iMax, jMin, jMax        INTEGER bi, bj, iMin, iMax, jMin, jMax
41        _RL myTime        _RL myTime
42        INTEGER myIter        INTEGER myIter
# Line 47  C  iTrc                 :: tracer index Line 50  C  iTrc                 :: tracer index
50  C  ks                   :: surface level index  C  ks                   :: surface level index
51        INTEGER i, j        INTEGER i, j
52        INTEGER iTrc, ks        INTEGER iTrc, ks
53          _RL add2EmP(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
54          _RL epsil, cutoff, tmpVar
55  CEOP  CEOP
56    
57        IF ( usingPCoords ) THEN        IF ( usingPCoords ) THEN
# Line 67  C Example of how to add forcing at the s Line 72  C Example of how to add forcing at the s
72            ENDDO            ENDDO
73        ENDDO        ENDDO
74    
75    C--   Option to convert Salt-relaxation into additional EmP contribution
76          IF ( PTRACERS_addSrelax2EmP ) THEN
77    C-    here we assume that salt_EvPrRn = 0
78    C     set cutoff value to prevent too large additional EmP:
79    C       current limit is set to 0.1 CFL
80            epsil = 1. _d -10
81            cutoff = 0.1 _d 0 *drF(ks)/PTRACERS_dTLev(ks)
82            IF ( ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
83         &         .AND. useRealFreshWaterFlux )
84         &     .OR.convertFW2Salt .EQ. -1. ) THEN
85             DO j = jMin, jMax
86              DO i = iMin, iMax
87                tmpVar = MAX( salt(i,j,ks,bi,bj), epsil )
88                add2EmP(i,j) = relaxForcingS(i,j)/tmpVar
89                add2EmP(i,j) = rUnit2mass
90         &                  *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
91              ENDDO
92             ENDDO
93            ELSE
94             DO j = jMin, jMax
95              DO i = iMin, iMax
96                add2EmP(i,j) = relaxForcingS(i,j)/convertFW2Salt
97                add2EmP(i,j) = rUnit2mass
98         &                  *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
99              ENDDO
100             ENDDO
101            ENDIF
102    #ifdef ALLOW_DIAGNOSTICS
103            IF ( useDiagnostics ) THEN
104             CALL DIAGNOSTICS_FILL(add2EmP,'Add2EmP ',0,1,2,bi,bj,myThid)
105            ENDIF
106    #endif /* ALLOW_DIAGNOSTICS */
107          ELSE
108            DO j = jMin, jMax
109              DO i = iMin, iMax
110                add2EmP(i,j) = 0. _d 0
111              ENDDO
112            ENDDO
113          ENDIF
114    C-- end of "addEmP" setting
115    
116  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
117        IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)        IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
118       &     .AND. useRealFreshWaterFlux ) THEN       &     .AND. useRealFreshWaterFlux ) THEN
# Line 82  c Line 128  c
128             DO i = iMin, iMax             DO i = iMin, iMax
129               surfaceForcingPTr(i,j,bi,bj,iTrc) =               surfaceForcingPTr(i,j,bi,bj,iTrc) =
130       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
131       &        + PmEpR(i,j,bi,bj)       &        + ( PmEpR(i,j,bi,bj) - add2EmP(i,j) )
132       &          *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )       &          *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )
133       &          *mass2rUnit       &          *mass2rUnit
134             ENDDO             ENDDO
# Line 112  C        local surface tracer Line 158  C        local surface tracer
158             DO i = iMin, iMax             DO i = iMin, iMax
159              surfaceForcingPTr(i,j,bi,bj,iTrc) =              surfaceForcingPTr(i,j,bi,bj,iTrc) =
160       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
161       &        + EmPmR(i,j,bi,bj)       &        + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
162       &          *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )       &          *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )
163       &          *mass2rUnit       &          *mass2rUnit
164             ENDDO             ENDDO
# Line 133  C     surface tracer (=PTRACERS_ref) Line 179  C     surface tracer (=PTRACERS_ref)
179             DO i = iMin, iMax             DO i = iMin, iMax
180              surfaceForcingPTr(i,j,bi,bj,iTrc) =              surfaceForcingPTr(i,j,bi,bj,iTrc) =
181       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
182       &        + EmPmR(i,j,bi,bj)       &        + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
183       &            *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )       &            *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )
184       &            *mass2rUnit       &            *mass2rUnit
185             ENDDO             ENDDO

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22