/[MITgcm]/MITgcm_contrib/jscott/igsm/src/hordiff_all.F
ViewVC logotype

Annotation of /MITgcm_contrib/jscott/igsm/src/hordiff_all.F

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


Revision 1.1 - (hide annotations) (download)
Fri Aug 11 19:35:31 2006 UTC (18 years, 11 months ago) by jscott
Branch: MAIN
CVS Tags: HEAD
atm2d package

1 jscott 1.1
2     #include "ctrparam.h"
3    
4     ! ==========================================================
5     !
6     ! HORDIFF.F: subroutine for calculating horizontal
7     ! diffusion of Q.
8     !
9     ! ----------------------------------------------------------
10     !
11     ! Revision History:
12     !
13     ! When Who What
14     ! ---- ---------- -------
15     ! 080100 Chien Wang repack based on CliChem3 & M24x11,
16     ! and add cpp.
17     !
18     ! ==========================================================
19    
20     SUBROUTINE HORDIFFALL(DTDIF)
21     #include "BD2G04.COM"
22     COMMON U,V,T,P,Q
23     DIMENSION VT(IM0,JM0,LM0),TT(IM0,JM0,LM0),PT(IM0,JM0),
24     & QT(IM0,JM0,LM0),PU(IM0,JM0),FD(IM0,JM0),DQDY(JM0,LM0)
25     & ,DTDY(JM0,LM0),DUDY(JM0,LM0),DVDY(JM0,LM0)
26     & ,UT(IM0,JM0,LM0)
27     COMMON/HDFLUX/VQHD(JM0,LM0),VTHD(JM0,LM0),VUHD(JM0,LM0),
28     & VVHD(JM0,LM0)
29     logical first
30     data first /.true./
31     I=1
32     JMM1=JM0-1
33     FDIFU=5.0E5
34     FDIFU=2.50E5
35    
36     FDIFF=5.0E5
37    
38     FDIFFQ=5.0E5
39     FDIFFQ=1.00E6
40    
41     if(first)then
42     print *,' HOR DIFF for Q and T'
43     print *,' FDIFF=',FDIFF,' FDIFFQ=',FDIFFQ
44     print *,' HOR DIFF for U and V'
45     print *,' FDIFU=',FDIFU
46     print *,'IM0=',IM0,' JM0=',JM0,' LM0=',LM0
47     print *,'IM=',IM,' JM=',JM,' LM=',LM
48     first=.false.
49     endif
50     DO 50 J=1,JM0
51     50 FD(I,J)=P(I,J)*DXYP(J)
52     DO 57 L=1,LM0
53     DO 57 J=1,JM0
54     AJL(J,L,56)=AJL(J,L,56)-Q (I,J,L)*P(I,J)
55     TT (I,J,L)=T (I,J,L)*FD(I,J)
56     57 QT (I,J,L)=Q (I,J,L)*FD(I,J)
57     DO 100 L=1,LM0
58     DO 100 J=2,JM0
59     DQDY(J,L)=(Q (1,J,L)-Q (1,J-1,L))/DYV(J)
60     DTDY(J,L)=(T (1,J,L)-T (1,J-1,L))/DYV(J)
61     100 CONTINUE
62     DO 200 L=1,LM0
63     PSAV=0.5*(P(1,1)+P(1,2))
64     !CAS FLUXQL=FDIFF*DQDY(2,L)*DXV(2)*PSAV*DTDIF
65     FLUXQL=FDIFFQ*DQDY(2,L)*DXV(2)*PSAV*DTDIF
66     FLUXQL=DMAX1( -0.5*QT(1,2,L), DMIN1(0.5*QT(1,1,L),FLUXQL))
67     FLUXTL=FDIFF*DTDY(2,L)*DXV(2)*PSAV*DTDIF
68     QT (1,1,L)=QT (1,1,L)+FLUXQL
69     TT (1,1,L)=TT (1,1,L)+FLUXTL
70     DO 210 J=2,JMM1
71     PSAV=0.5*(P(1,J)+P(1,J+1))
72     !CAS FLUXQR=FDIFF*DQDY(J+1,L)*DXV(J+1)*PSAV*DTDIF
73     FLUXQR=FDIFFQ*DQDY(J+1,L)*DXV(J+1)*PSAV*DTDIF
74     FLUXQR=DMAX1( -0.5*QT(1,J+1,L), DMIN1(0.5*QT(1,J,L),FLUXQR))
75     FLUXTR=FDIFF*DTDY(J+1,L)*DXV(J+1)*PSAV*DTDIF
76     QT (1,J,L)=QT (1,J,L)+(FLUXQR-FLUXQL)
77     TT (1,J,L)=TT (1,J,L)+(FLUXTR-FLUXTL)
78     VQHD(J,L)=-FLUXQL/(DXV(J)*0.5*(P(1,J)+P(1,J-1))*DTDIF)
79     VTHD(J,L)=-FLUXTL/(DXV(J)*0.5*(P(1,J)+P(1,J-1))*DTDIF)
80     FLUXQL=FLUXQR
81     FLUXTL=FLUXTR
82     210 CONTINUE
83     QT (1,JM,L)=QT (1,JM,L)-FLUXQR
84     TT (1,JM,L)=TT (1,JM,L)-FLUXTR
85     J=JM
86     VQHD(J,L)=-FLUXQL/(DXV(J)*0.5*(P(1,J)+P(1,J-1))*DTDIF)
87     VTHD(J,L)=-FLUXTL/(DXV(J)*0.5*(P(1,J)+P(1,J-1))*DTDIF)
88     200 CONTINUE
89     DO 300 L=1,LM0
90     DO 300 J=1,JM0
91     Q (I,J,L)=QT (I,J,L)/FD(I,J)
92     T (I,J,L)=TT (I,J,L)/FD(I,J)
93     AJL(J,L,56)=AJL(J,L,56)+Q (I,J,L)*P(I,J)
94     300 CONTINUE
95     DOPK=1.
96     FD(I,1)=2.*FD(I,1)
97     FD(I,JM)=2.*FD(I,JM)
98     DO 65 J=2,JM
99     FDU=.5*(FD(I,J)+FD(I,J-1))
100     DO 65 L=1,LM
101     VT(I,J,L)=V(I,J,L)*FDU
102     65 UT(I,J,L)=U(I,J,L)*FDU
103     DO 110 L=1,LM0
104     DO 110 J=3,JM0
105     DUDY(J,L)=(U (1,J,L)-U (1,J-1,L))/DYP(J)
106     DVDY(J,L)=(V (1,J,L)-V (1,J-1,L))/DYP(J)
107     110 CONTINUE
108     DO 400 L=1,LM0
109     PSAV=P(1,2)
110     FLUXVL=FDIFU*DVDY(3,L)*DXP(2)*PSAV*DTDIF
111     FLUXUL=FDIFU*DUDY(3,L)*DXP(2)*PSAV*DTDIF
112     VT (1,2,L)=VT (1,2,L)+FLUXVL
113     UT (1,2,L)=UT (1,2,L)+FLUXUL
114     DO 410 J=3,JMM1
115     PSAV=P(1,J)
116     FLUXVR=FDIFU*DVDY(J+1,L)*DXP(J)*PSAV*DTDIF
117     FLUXUR=FDIFU*DUDY(J+1,L)*DXP(J)*PSAV*DTDIF
118     VT (1,J,L)=VT (1,J,L)+(FLUXVR-FLUXVL)
119     UT (1,J,L)=UT (1,J,L)+(FLUXUR-FLUXUL)
120     VVHD(J-1,L)=-FLUXVL/(DXP(J-1)*P(1,J-1)*DTDIF)
121     VUHD(J-1,L)=-FLUXUL/(DXP(J-1)*P(1,J-1)*DTDIF)
122     FLUXVL=FLUXVR
123     FLUXUL=FLUXUR
124     410 CONTINUE
125     VT (1,JM,L)=VT (1,JM,L)-FLUXVR
126     UT (1,JM,L)=UT (1,JM,L)-FLUXUR
127     J=JM
128     VVHD(J-1,L)=-FLUXVL/(DXP(J-1)*P(1,J-1)*DTDIF)
129     VUHD(J-1,L)=-FLUXUL/(DXP(J-1)*P(1,J-1)*DTDIF)
130     400 CONTINUE
131     DO 75 J=2,JM
132     RFDU=2./(FD(I,J)+FD(I,J-1))
133     DO 75 L=1,LM0
134     V(I,J,L)=VT(I,J,L)*RFDU
135     U(I,J,L)=UT(I,J,L)*RFDU
136     #if ( defined HR_DATA )
137     if(L.le.4)then
138     uyzhr(L,J)=U(I,J,L)
139     vyzhr(L,J)=V(I,J,L)
140     endif
141     #endif
142     75 CONTINUE
143     RETURN
144     END

  ViewVC Help
Powered by ViewVC 1.1.22