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

Contents 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 - (show 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
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