/[MITgcm]/MITgcm_contrib/sciascia/rbcs/rbcs_add_tendency.F
ViewVC logotype

Contents of /MITgcm_contrib/sciascia/rbcs/rbcs_add_tendency.F

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


Revision 1.1 - (show annotations) (download)
Wed Aug 8 01:57:14 2012 UTC (12 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: HEAD
Add a modified version of pkg/rbcs that allows several rbcs
fields to be read with independent frequencies.
The idea is for each i = 1 , ... , U/V/WnLEN
one can define a separate mask and relaxation file
and separate/independent periods.

1 C $Header: /u/gcmpack/MITgcm/pkg/rbcs/rbcs_add_tendency.F,v 1.9 2012/06/26 22:19:17 gforget Exp $
2 C $Name: $
3
4 #include "RBCS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: RBCS_ADD_TSTENDENCY
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE RBCS_ADD_TENDENCY(
11 I bi, bj, k, tracerNum,
12 I myTime, myThid )
13
14 C !DESCRIPTION:
15 C Will update tendencies with terms to relax to 3-D field
16
17 C !USES: ===============================================================
18 IMPLICIT NONE
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 c#include "GRID.h"
23 #include "DYNVARS.h"
24 #include "NH_VARS.h"
25 #ifdef ALLOW_PTRACERS
26 #include "PTRACERS_SIZE.h"
27 #include "PTRACERS_FIELDS.h"
28 #endif
29 #include "RBCS_SIZE.h"
30 #include "RBCS_PARAMS.h"
31 #include "RBCS_FIELDS.h"
32
33 C !INPUT PARAMETERS: ===================================================
34 C bi,bj :: tile indices
35 C k :: vertical level index
36 C tracerNum :: tracer number (1=Temp, 2=Salt, >2 : ptracer)
37 C myTime :: current time
38 C myIter :: current timestep
39 C myThid :: my Thread Id number
40 INTEGER bi, bj, k
41 INTEGER tracerNum
42 _RL myTime
43 c INTEGER myIter
44 INTEGER myThid
45
46 C !LOCAL VARIABLES: ====================================================
47 C i,j :: loop indices
48 INTEGER i,j
49 _RL rbcsVanishingFac
50 INTEGER ium,ivm,iwm
51 #ifdef ALLOW_PTRACERS
52 INTEGER iTracer
53 INTEGER irbc
54 #endif
55 CEOP
56
57 #ifdef ALLOW_RBCS
58
59 if (rbcsVanishingTime.GT.0. _d 0) then
60 rbcsVanishingFac =
61 & MAX( 0. _d 0 , 1. _d 0 - mytime / rbcsVanishingTime )
62 else
63 rbcsVanishingFac = 1. _d 0
64 endif
65
66 #ifndef DISABLE_RBCS_MOM
67 DO ium=1,UmLEN
68 IF ( tracerNum.EQ.-1 .AND. useRBCuVel(ium) ) THEN
69 DO j=0,sNy+1
70 DO i=0,sNx+1
71 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
72 & - RBC_maskU(i,j,k,bi,bj,ium)/tauRelaxU(ium)
73 & *( uVel(i,j,k,bi,bj)- RBCuVel(i,j,k,bi,bj,ium) )
74 c & *maskW(i,j,k,bi,bj)
75 & *rbcsVanishingFac
76 ENDDO
77 ENDDO
78 ENDIF
79 ENDDO
80 DO ivm=1,VmLEN
81 IF ( tracerNum.EQ.-2 .AND. useRBCvVel(ivm) ) THEN
82 DO j=0,sNy+1
83 DO i=0,sNx+1
84 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
85 & - RBC_maskV(i,j,k,bi,bj,ivm)/tauRelaxV(ivm)
86 & *( vVel(i,j,k,bi,bj)- RBCvVel(i,j,k,bi,bj,ivm) )
87 c & *maskS(i,j,k,bi,bj)
88 & *rbcsVanishingFac
89 ENDDO
90 ENDDO
91 ENDIF
92 ENDDO
93 #ifdef ALLOW_NONHYDROSTATIC
94 DO iwm=1,WmLEN
95 IF ( tracerNum.EQ.-3 .AND. useRBCwVel(iwm) ) THEN
96 DO j=0,sNy+1
97 DO i=0,sNx+1
98 gW(i,j,k,bi,bj) = gW(i,j,k,bi,bj)
99 & - RBC_maskW(i,j,k,bi,bj,iwm)/tauRelaxW(iwm)
100 & *( wVel(i,j,k,bi,bj)- RBCwVel(i,j,k,bi,bj,iwm) )
101 c & *maskS(i,j,k,bi,bj)
102 & *rbcsVanishingFac
103 ENDDO
104 ENDDO
105 ENDIF
106 ENDDO
107 #endif
108 #endif /* DISABLE_RBCS_MOM */
109
110 IF ( tracerNum.EQ.1 .AND. useRBCtemp ) THEN
111 DO j=1,sNy
112 DO i=1,sNx
113 gT(i,j,k,bi,bj) = gT(i,j,k,bi,bj)
114 & - RBC_mask(i,j,k,bi,bj,1)/tauRelaxT
115 & *( theta(i,j,k,bi,bj)- RBCtemp(i,j,k,bi,bj) )
116 c & *maskC(i,j,k,bi,bj)
117 & *rbcsVanishingFac
118
119 ENDDO
120 ENDDO
121 ENDIF
122
123 IF ( tracerNum.EQ.2 .AND. useRBCsalt ) THEN
124 DO j=1,sNy
125 DO i=1,sNx
126 gS(i,j,k,bi,bj) = gS(i,j,k,bi,bj)
127 & - RBC_mask(i,j,k,bi,bj,2)/tauRelaxS
128 & *( salt(i,j,k,bi,bj)- RBCsalt(i,j,k,bi,bj) )
129 c & *maskC(i,j,k,bi,bj)
130 & *rbcsVanishingFac
131 ENDDO
132 ENDDO
133 ENDIF
134
135 #ifdef ALLOW_PTRACERS
136 IF ( usePTRACERS .AND. tracerNum.GT.2 ) THEN
137 iTracer = tracerNum-2
138 irbc = MIN(maskLEN,tracerNum)
139 IF ( useRBCptrnum(iTracer) ) THEN
140 DO j=1,sNy
141 DO i=1,sNx
142 gPtr(i,j,k,bi,bj,iTracer) = gPtr(i,j,k,bi,bj,iTracer)
143 & - RBC_mask(i,j,k,bi,bj,irbc)/tauRelaxPTR(iTracer)
144 & *( pTracer(i,j,k,bi,bj,iTracer)
145 & - RBC_ptracers(i,j,k,bi,bj,iTracer) )
146 c & *maskC(i,j,k,bi,bj)
147 & *rbcsVanishingFac
148 ENDDO
149 ENDDO
150 ENDIF
151 ENDIF
152 #endif /* ALLOW_PTRACERS */
153
154 #endif /* ALLOW_RBCS */
155
156 RETURN
157 END

  ViewVC Help
Powered by ViewVC 1.1.22