/[MITgcm]/MITgcm_contrib/gael/pkg/smooth/smooth_diff2D.F
ViewVC logotype

Annotation of /MITgcm_contrib/gael/pkg/smooth/smooth_diff2D.F

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


Revision 1.1 - (hide annotations) (download)
Tue Jun 19 18:23:18 2007 UTC (18 years, 1 month ago) by gforget
Branch: MAIN
pkg/smooth preliminary version

1 gforget 1.1 #include "CPP_OPTIONS.h"
2    
3     subroutine smooth_diff2D (
4     U fld_in,mask_in,nbt_in,mythid)
5    
6    
7     IMPLICIT NONE
8     #include "SIZE.h"
9     #include "EEPARAMS.h"
10     #include "GRID.h"
11     #include "PARAMS.h"
12     #ifdef ALLOW_AUTODIFF_TAMC
13     #include "tamc.h"
14     #include "tamc_keys.h"
15     #endif /* ALLOW_AUTODIFF_TAMC */
16     #include "smooth.h"
17    
18     integer i,j,k, bi, bj
19     integer itlo,ithi
20     integer jtlo,jthi
21     integer myThid,myIter(nSx,nSy),key_in
22    
23     _RL mask_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy)
24     _RL fld_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
25     _RL gt_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
26     _RL gtm1_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
27     integer nbt_in
28    
29     integer iloop, ilev_1, ilev_2, ilev_3
30     integer max_lev2, max_lev3
31     _RL ab15,ab05
32     _RL gt_tmp
33     character*( 80) fnamegeneric
34    
35    
36     c for now: useless, because level 3 is recomputed anyway
37     c but : if level3 was computed during the fwd loop by callung
38     c mdsmooth_diff3D (assumes that it would be called
39     c directly by the_main_loop) then I would need to pass key_in
40     c as a parameter, with different values for T, S, ...
41     c in order not to overwrite the same tape
42     key_in=0
43    
44     jtlo = mybylo(mythid)
45     jthi = mybyhi(mythid)
46     itlo = mybxlo(mythid)
47     ithi = mybxhi(mythid)
48    
49     DO bj = jtlo,jthi
50     DO bi = itlo,ithi
51     DO j = 1,sNy
52     DO i = 1,sNx
53     c now done in wrapper routines:
54     c fld_in(i,j,bi,bj)=fld_in(i,j,bi,bj)
55     c & *sqrt(recip_rA(i,j,bi,bj))
56     gt_in(i,j,bi,bj) = 0. _d 0
57     gtm1_in(i,j,bi,bj) = 0. _d 0
58     wc01_2D_mask(i,j,bi,bj) = mask_in(i,j,1,bi,bj)
59     ENDDO
60     ENDDO
61     ENDDO
62     ENDDO
63    
64     _EXCH_XY_R8 ( fld_in , myThid )
65     _EXCH_XY_R8 ( gt_in , myThid )
66     _EXCH_XY_R8 ( gtm1_in , myThid )
67     _EXCH_XY_R8 ( wc01_2D_mask , myThid )
68    
69     #ifdef ALLOW_TAMC_CHECKPOINTING
70    
71     c checkpointing:
72     max_lev3=nbt_in/(nchklev_1*nchklev_2)+1
73     max_lev2=nbt_in/nchklev_1+1
74     #ifdef ALLOW_AUTODIFF_TAMC
75     CADJ INIT tape_wc01_2D_lev3 = USER
76     #endif /* ALLOW_AUTODIFF_TAMC */
77     do ilev_3 = 1,nchklev_3
78     if(ilev_3.le.max_lev3) then
79     #ifdef ALLOW_AUTODIFF_TAMC
80     CADJ STORE fld_in = tape_wc01_2D_lev3 ,
81     CADJ & key = key_in*max_lev3 + ilev_3
82     CADJ STORE gTm1_in = tape_wc01_2D_lev3 ,
83     CADJ & key = key_in*max_lev3 + ilev_3
84     #endif /* ALLOW_AUTODIFF_TAMC */
85     #ifdef ALLOW_AUTODIFF_TAMC
86     CADJ INIT tape_wc01_2D_lev2 = USER
87     #endif /* ALLOW_AUTODIFF_TAMC */
88    
89     do ilev_2 = 1,nchklev_2
90     if(ilev_2.le.max_lev2) then
91     #ifdef ALLOW_AUTODIFF_TAMC
92     CADJ STORE fld_in = tape_wc01_2D_lev2 ,
93     CADJ & key = key_in*nchklev_2 + ilev_2
94     CADJ STORE gTm1_in = tape_wc01_2D_lev2 ,
95     CADJ & key = key_in*nchklev_2 + ilev_2
96     #endif /* ALLOW_AUTODIFF_TAMC */
97     #ifdef ALLOW_AUTODIFF_TAMC
98     CADJ INIT tape_wc01_2D_lev1 = COMMON,
99     CADJ & nchklev_1*nsx*nsy*nthreads_chkpt
100     #endif /* ALLOW_AUTODIFF_TAMC */
101    
102     do ilev_1 = 1,nchklev_1
103     iloop = (ilev_2 - 1)*nchklev_1 + ilev_1
104     & + (ilev_3 - 1)*nchklev_2*nchklev_1
105     if ( iloop .le. nbt_in ) then
106     #ifdef ALLOW_AUTODIFF_TAMC
107     c needed?? CADJ STORE fld_in = tape_wc01_2D_lev1 ,
108     c CADJ & key = key_in*nchklev_1 + ilev_1
109     CADJ STORE gtm1_in = tape_wc01_2D_lev1 ,
110     CADJ & key = key_in*nchklev_1 + ilev_1
111     #endif /* ALLOW_AUTODIFF_TAMC */
112    
113    
114     #else /* ALLOW_TAMC_CHECKPOINTING */
115     do iloop=1,nbt_in
116     #endif
117    
118     DO bj = jtlo,jthi
119     DO bi = itlo,ithi
120     DO j = 1,sNy
121     DO i = 1,sNx
122    
123     gt_in(i,j,bi,bj)=0.
124    
125     gt_in(i,j,bi,bj)=gt_in(i,j,bi,bj)+
126     & diffKhwc01_2D_x(i,j,bi,bj)*dyG(i,j,bi,bj)*
127     & wc01_2D_mask(i,j,bi,bj)*wc01_2D_mask(i-1,j,bi,bj)*
128     & (fld_in(i,j,bi,bj)-fld_in(i-1,j,bi,bj))*recip_dxC(i,j,bi,bj)
129    
130     gt_in(i,j,bi,bj)=gt_in(i,j,bi,bj)+
131     & diffKhwc01_2D_x(i+1,j,bi,bj)*dyG(i+1,j,bi,bj)*
132     & wc01_2D_mask(i,j,bi,bj)*wc01_2D_mask(i+1,j,bi,bj)*
133     & (fld_in(i,j,bi,bj)-fld_in(i+1,j,bi,bj))*recip_dxC(i+1,j,bi,bj)
134    
135     gt_in(i,j,bi,bj)=gt_in(i,j,bi,bj)+
136     & diffKhwc01_2D_y(i,j,bi,bj)*dxG(i,j,bi,bj)*
137     & wc01_2D_mask(i,j,bi,bj)*wc01_2D_mask(i,j-1,bi,bj)*
138     & (fld_in(i,j,bi,bj)-fld_in(i,j-1,bi,bj))*recip_dyC(i,j,bi,bj)
139    
140     gt_in(i,j,bi,bj)=gt_in(i,j,bi,bj)+
141     & diffKhwc01_2D_y(i,j+1,bi,bj)*dxG(i,j+1,bi,bj)*
142     & wc01_2D_mask(i,j,bi,bj)*wc01_2D_mask(i,j+1,bi,bj)*
143     & (fld_in(i,j,bi,bj)-fld_in(i,j+1,bi,bj))*recip_dyC(i,j+1,bi,bj)
144    
145     ENDDO
146     ENDDO
147     ENDDO
148     ENDDO
149    
150     do bj = jtlo,jthi
151     do bi = itlo,ithi
152     c Adams-Bashforth timestepping
153     myIter(bi,bj)=iloop-1
154     IF ( myIter(bi,bj).EQ.0 ) THEN
155     ab15=1.0
156     ab05=0.0
157     ELSE
158     ab15=1.5+abEps
159     ab05=-(0.5+abEps)
160     ENDIF
161     DO j = 1,sNy
162     DO i = 1,sNx
163     c Compute effective G-term with Adams-Bashforth
164     gt_tmp = ab15*gt_in(i,j,bi,bj)
165     & + ab05*gtm1_in(i,j,bi,bj)
166     gtm1_in(i,j,bi,bj) = gt_in(i,j,bi,bj)
167     gt_in(i,j,bi,bj) = gt_tmp
168     c time step:
169     fld_in(i,j,bi,bj)=fld_in(i,j,bi,bj)
170     & -gt_in(i,j,bi,bj)*recip_rA(i,j,bi,bj)*wc01_2D_dt
171     gt_in(i,j,bi,bj)=0
172     ENDDO
173     ENDDO
174     ENDDO
175     ENDDO
176    
177     _EXCH_XY_R8 ( gt_in , myThid )
178     _EXCH_XY_R8 ( fld_in , myThid )
179     _EXCH_XY_R8 ( gtm1_in , myThid )
180    
181     #ifdef ALLOW_TAMC_CHECKPOINTING
182     endif
183     enddo
184     endif
185     enddo
186     endif
187     enddo
188     #else /* ALLOW_TAMC_CHECKPOINTING */
189     enddo
190     #endif
191    
192     end

  ViewVC Help
Powered by ViewVC 1.1.22