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

Annotation 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 - (hide 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 heimbach 1.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