/[MITgcm]/MITgcm/pkg/ptracers/ptracers_forcing_surf.F
ViewVC logotype

Diff of /MITgcm/pkg/ptracers/ptracers_forcing_surf.F

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

revision 1.9 by jmc, Mon Nov 5 18:48:04 2007 UTC revision 1.10 by jmc, Sun Sep 5 22:28:14 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 66  c    &               surfaceForcingS(i,j Line 71  c    &               surfaceForcingS(i,j
71            ENDDO            ENDDO
72        ENDDO        ENDDO
73    
74    C--   Option to convert Salt-relaxation into additional EmP contribution
75          IF ( PTRACERS_addSrelax2EmP ) THEN
76    C-    here we assume that salt_EvPrRn = 0
77    C     set cutoff value to prevent too large additional EmP:
78    C       current limit is set to 0.1 CFL
79            epsil = 1. _d -10
80            cutoff = 0.1 _d 0 *drF(ks)/PTRACERS_dTLev(ks)
81            IF ( ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
82         &         .AND. useRealFreshWaterFlux )
83         &     .OR.convertFW2Salt .EQ. -1. ) THEN
84             DO j = jMin, jMax
85              DO i = iMin, iMax
86                tmpVar = MAX( salt(i,j,ks,bi,bj), epsil )
87                add2EmP(i,j) = relaxForcingS(i,j)/tmpVar
88                add2EmP(i,j) = rUnit2mass
89         &                  *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
90              ENDDO
91             ENDDO
92            ELSE
93             DO j = jMin, jMax
94              DO i = iMin, iMax
95                add2EmP(i,j) = relaxForcingS(i,j)/convertFW2Salt
96                add2EmP(i,j) = rUnit2mass
97         &                  *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
98              ENDDO
99             ENDDO
100            ENDIF
101    #ifdef ALLOW_DIAGNOSTICS
102            IF ( useDiagnostics ) THEN
103             CALL DIAGNOSTICS_FILL(add2EmP,'Add2EmP ',0,1,2,bi,bj,myThid)
104            ENDIF
105    #endif /* ALLOW_DIAGNOSTICS */
106          ELSE
107            DO j = jMin, jMax
108              DO i = iMin, iMax
109                add2EmP(i,j) = 0. _d 0
110              ENDDO
111            ENDDO
112          ENDIF
113    C-- end of "addEmP" setting
114    
115  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
116        IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)        IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
117       &     .AND. useRealFreshWaterFlux ) THEN       &     .AND. useRealFreshWaterFlux ) THEN
# Line 81  c Line 127  c
127             DO i = iMin, iMax             DO i = iMin, iMax
128               surfaceForcingPTr(i,j,bi,bj,iTrc) =               surfaceForcingPTr(i,j,bi,bj,iTrc) =
129       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
130       &        + PmEpR(i,j,bi,bj)       &        + ( PmEpR(i,j,bi,bj) - add2EmP(i,j) )
131       &          *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )       &          *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )
132       &          *mass2rUnit       &          *mass2rUnit
133             ENDDO             ENDDO
# Line 111  C        local surface tracer Line 157  C        local surface tracer
157             DO i = iMin, iMax             DO i = iMin, iMax
158              surfaceForcingPTr(i,j,bi,bj,iTrc) =              surfaceForcingPTr(i,j,bi,bj,iTrc) =
159       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
160       &        + EmPmR(i,j,bi,bj)       &        + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
161       &          *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )       &          *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )
162       &          *mass2rUnit       &          *mass2rUnit
163             ENDDO             ENDDO
# Line 132  C     surface tracer (=PTRACERS_ref) Line 178  C     surface tracer (=PTRACERS_ref)
178             DO i = iMin, iMax             DO i = iMin, iMax
179              surfaceForcingPTr(i,j,bi,bj,iTrc) =              surfaceForcingPTr(i,j,bi,bj,iTrc) =
180       &          surfaceForcingPTr(i,j,bi,bj,iTrc)       &          surfaceForcingPTr(i,j,bi,bj,iTrc)
181       &        + EmPmR(i,j,bi,bj)       &        + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
182       &            *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )       &            *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )
183       &            *mass2rUnit       &            *mass2rUnit
184             ENDDO             ENDDO

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.22