/[MITgcm]/MITgcm_contrib/gael/pkg/smooth2/smooth_init3D.F
ViewVC logotype

Contents of /MITgcm_contrib/gael/pkg/smooth2/smooth_init3D.F

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


Revision 1.3 - (show annotations) (download)
Mon Feb 15 23:14:47 2010 UTC (15 years, 5 months ago) by gforget
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +27 -27 lines
change IO calls

1 C $Header: /u/gcmpack/MITgcm_contrib/gael/pkg/smooth2/smooth_init3D.F,v 1.2 2009/11/13 19:52:32 jmc Exp $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5
6 subroutine smooth_init3D (smoothOpNb,mythid)
7
8 C *==========================================================*
9 C | SUBROUTINE smooth_init3D
10 C | o Routine that initializes one 3D smoothing/correlation operator
11 C | by computing/writing the corresponding diffusion operator
12 C *==========================================================*
13
14 cgf the choices of smooth3Dtype and smooth3Dsize need comments...
15 cgf
16 cgf smooth3DtypeH= 1) HORIZONTAL ALONG GRID AXIS
17 cgf 2-3) GMREDI TYPES
18 cgf 4) HORIZONTAL BUT WITH ROTATED AXIS
19 cgf for now I focus on the simpler smooth3DtypeH=1 case
20
21
22 IMPLICIT NONE
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "DYNVARS.h"
27 #include "GRID.h"
28 c#include "tamc.h"
29 #include "FFIELDS.h"
30 #include "EOS.h"
31 #include "smooth.h"
32
33 integer i,j,k, bi, bj, imin, imax, jmin, jmax
34 integer itlo,ithi
35 integer jtlo,jthi
36 integer myThid
37 character*( 80) fnamegeneric
38 _RL smooth3D_KzMax
39 integer ii,jj,kk
40 integer smoothOpNb
41
42 jtlo = mybylo(mythid)
43 jthi = mybyhi(mythid)
44 itlo = mybxlo(mythid)
45 ithi = mybxhi(mythid)
46
47 smooth3DtotTime=smooth3Dnbt(smoothOpNb)*smooth3DdelTime
48
49 WRITE(standardMessageUnit,'(A,2I4,/,3f5.2)')
50 & 'smooth 3D default parameters: ',
51 & smooth3Dnbt(smoothOpNb),smooth3DtotTime,
52 & smooth3D_Lx0(smoothOpNb),smooth3D_Ly0(smoothOpNb),
53 & smooth3D_Lz0(smoothOpNb)
54
55
56 c vertical smoothing:
57
58 if (smooth3DsizeZ(smoothOpNb).EQ.3) then
59 write(fnamegeneric(1:80),'(1a,i3.3)')
60 & 'smooth3DscalesZ',smoothOpNb
61 CALL READ_REC_3D_RL(fnamegeneric,smoothprec,
62 & Nr, smooth3D_Lz,1,1,mythid)
63 _EXCH_XYZ_RL( smooth3D_Lz, mythid )
64 else
65 DO bj=jtlo,jthi
66 DO bi=itlo,ithi
67 DO k=1,Nr
68 DO j=1-OLy,sNy+OLy
69 DO i=1-OLx,sNx+OLx
70 smooth3D_Lz(i,j,k,bi,bj)=smooth3D_Lz0(smoothOpNb)
71 ENDDO
72 ENDDO
73 ENDDO
74 ENDDO
75 ENDDO
76 endif
77
78 DO bj=jtlo,jthi
79 DO bi=itlo,ithi
80 DO k=1,Nr
81 DO j=1-OLy,sNy+OLy
82 DO i=1-OLx,sNx+OLx
83 smooth3D_kappaR(i,j,k,bi,bj)=smooth3D_Lz(i,j,k,bi,bj)*
84 & smooth3D_Lz(i,j,k,bi,bj)/smooth3DtotTime/2
85 ENDDO
86 ENDDO
87 ENDDO
88 ENDDO
89 ENDDO
90
91 c avoid excessive vertical smoothing:
92 if (smooth3DsizeZ(smoothOpNb).NE.3) then
93 DO bj=jtlo,jthi
94 DO bi=itlo,ithi
95 DO k=1,Nr
96 DO j=1-OLy,sNy+OLy
97 DO i=1-OLx,sNx+OLx
98
99 smooth3D_KzMax=drC(k)
100 smooth3D_KzMax=smooth3D_KzMax*smooth3D_KzMax/smooth3DtotTime/2
101 if (smooth3D_kappaR(i,j,k,bi,bj).GT.smooth3D_KzMax) then
102 smooth3D_kappaR(i,j,k,bi,bj)=smooth3D_KzMax
103 endif
104 ENDDO
105 ENDDO
106 ENDDO
107 ENDDO
108 ENDDO
109 endif
110
111 _EXCH_XYZ_RL( smooth3D_kappaR, myThid )
112
113
114 c hoizontal smoothing:
115
116 if (smooth3DsizeH(smoothOpNb).EQ.3) then
117 write(fnamegeneric(1:80),'(1a,i3.3)')
118 & 'smooth3DscalesH',smoothOpNb
119 CALL READ_REC_3D_RL(fnamegeneric,smoothprec,
120 & Nr, smooth3D_Lx,1,1,mythid)
121 CALL READ_REC_3D_RL(fnamegeneric,smoothprec,
122 & Nr, smooth3D_Ly,2,1,mythid)
123 _EXCH_XYZ_RL( smooth3D_Lx, mythid )
124 _EXCH_XYZ_RL( smooth3D_Ly, mythid )
125 else
126 DO bj=jtlo,jthi
127 DO bi=itlo,ithi
128 DO k=1,Nr
129 DO j=1-OLy,sNy+OLy
130 DO i=1-OLx,sNx+OLx
131 smooth3D_Lx(i,j,k,bi,bj)=smooth3D_Lx0(smoothOpNb)
132 smooth3D_Ly(i,j,k,bi,bj)=smooth3D_Ly0(smoothOpNb)
133 ENDDO
134 ENDDO
135 ENDDO
136 ENDDO
137 ENDDO
138 endif
139
140 DO bj=jtlo,jthi
141 DO bi=itlo,ithi
142 DO k=1,Nr
143 DO j=1-OLy,sNy+OLy
144 DO i=1-OLx,sNx+OLx
145 smooth3D_Kuy(i,j,k,bi,bj)=0.
146 smooth3D_Kvx(i,j,k,bi,bj)=0.
147 smooth3D_Kwx(i,j,k,bi,bj)=0.
148 smooth3D_Kwy(i,j,k,bi,bj)=0.
149 smooth3D_Kwz(i,j,k,bi,bj)=0.
150 smooth3D_Kux(i,j,k,bi,bj)=smooth3D_Lx(i,j,k,bi,bj)*
151 & smooth3D_Lx(i,j,k,bi,bj)/smooth3DtotTime/2
152 smooth3D_Kvy(i,j,k,bi,bj)=smooth3D_Ly(i,j,k,bi,bj)*
153 & smooth3D_Ly(i,j,k,bi,bj)/smooth3DtotTime/2
154 smooth3D_Kuz(i,j,k,bi,bj)=0.
155 smooth3D_Kvz(i,j,k,bi,bj)=0.
156 ENDDO
157 ENDDO
158 ENDDO
159 ENDDO
160 ENDDO
161
162 c is exchange useful here?
163
164 _EXCH_XYZ_RL( smooth3D_kappaR, myThid )
165 _EXCH_XYZ_RL( smooth3D_Kwx, myThid )
166 _EXCH_XYZ_RL( smooth3D_Kwy, myThid )
167 _EXCH_XYZ_RL( smooth3D_Kwz, myThid )
168 _EXCH_XYZ_RL( smooth3D_Kux, myThid )
169 _EXCH_XYZ_RL( smooth3D_Kvy, myThid )
170 _EXCH_XYZ_RL( smooth3D_Kuz, myThid )
171 _EXCH_XYZ_RL( smooth3D_Kvz, myThid )
172 _EXCH_XYZ_RL( smooth3D_Kuy, myThid )
173 _EXCH_XYZ_RL( smooth3D_Kvx, myThid )
174
175
176 c write diffusion operator to file
177
178 write(fnamegeneric(1:80),'(1a,i3.3)')
179 & 'smooth3Doperator',smoothOpNb
180
181 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
182 & Nr,smooth3D_Kwx,1,1,mythid)
183 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
184 & Nr,smooth3D_Kwy,2,1,mythid)
185 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
186 & Nr,smooth3D_Kwz,3,1,mythid)
187 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
188 & Nr,smooth3D_Kux,4,1,mythid)
189 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
190 & Nr,smooth3D_Kvy,5,1,mythid)
191 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
192 & Nr,smooth3D_Kuz,6,1,mythid)
193 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
194 & Nr,smooth3D_Kvz,7,1,mythid)
195 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
196 & Nr,smooth3D_Kuy,8,1,mythid)
197 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
198 & Nr,smooth3D_Kvx,9,1,mythid)
199 CALL WRITE_REC_3D_RL(fnamegeneric,smoothprec,
200 & Nr,smooth3D_kappaR,10,1,mythid)
201
202
203 END

  ViewVC Help
Powered by ViewVC 1.1.22