New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
oce_tam.F90 in branches/TAM_V3_0/NEMOTAM/OPATAM_SRC – NEMO

source: branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/oce_tam.F90 @ 2587

Last change on this file since 2587 was 2587, checked in by vidard, 13 years ago

refer to ticket #798

File size: 31.9 KB
Line 
1MODULE oce_tam
2   !!----------------------------------------------------------------------
3   !!    This software is governed by the CeCILL licence (Version 2)
4   !!----------------------------------------------------------------------
5   !!======================================================================
6   !!                       ***  MODULE oce_tam ***
7   !! NEMOVAR Tangent linear and Adjoint Model variables :
8   !!
9   !!    Allocate tangent linear and adjoint fields for the inner loop
10   !!
11   !!======================================================================
12   !! History of the direct module:
13   !!   8.5  !  02-11  (G. Madec)  F90: Free form and module
14   !!   9.0  !  05-11  (V. Garnier) Surface pressure gradient organization
15   !! History of the TAM module:
16   !!   9.0  !  07-07 (K. Mogensen) Initial version
17   !!   9.0  !  08-03 (A. Vidard) Add variables
18   !!   9.0  !  09-03 (A. Weaver) Nemo v3 compatible, merge tl_init/ad_init
19   !!----------------------------------------------------------------------
20   !!   oce_tam_init : Allocate and initialize the TAM fields
21   !!----------------------------------------------------------------------
22   !! * Modules used   
23   USE par_kind, ONLY : &  ! Precision variables
24      & wp
25   USE par_oce, ONLY : &   ! Ocean space and time domain variables
26      & jpi, &
27      & jpj, &
28      & jpk
29
30   IMPLICIT NONE
31
32   !! * Routine accessibility
33   PRIVATE
34   PUBLIC &
35      & oce_tam_init, & !: Initialize the TAM fields
36      & oce_tam_deallocate, &
37                    !:
38      & ub_tl,    & !: Tangent linear of before u-component velocity
39      & un_tl,    & !: Tangent linear of now u-component velocity
40      & ua_tl,    & !: Tangent linear of after u-component velocity
41      & vb_tl,    & !: Tangent linear of before v-component velocity
42      & vn_tl,    & !: Tangent linear of now v-component velocity
43      & va_tl,    & !: Tangent linear of after v-component velocity
44      & wn_tl,    & !: Tangent linear of now w-component velocity
45      & rotb_tl,  & !: Tangent linear of now relative vorticity
46      & rotn_tl,  & !: Tangent linear of now relative vorticity
47      & hdivb_tl, & !: Tangent linear of before horizontal divergence
48      & hdivn_tl, & !: Tangent linear of now horizontal divergence
49      & tb_tl,    & !: Tangent linear of before of temperature
50      & tn_tl,    & !: Tangent linear of now temperature
51      & ta_tl,    & !: Tangent linear of after temperature
52      & sb_tl,    & !: Tangent linear of before salinity
53      & sn_tl,    & !: Tangent linear of now salinity
54      & sa_tl,    & !: Tangent linear of after salinity
55      & rhd_tl,   & !: Tangent linear of Now in situ density anomaly 
56      & rhop_tl,  & !: Tangent linear of potential volumic mass (kg/m3)
57      & rn2_tl,   & !: Tangent linear of Now Brunt-Vaisala frequency
58                    !:
59      & spgu_tl,  & !: Tangent linear of horizontal surface pressure gradient
60      & spgv_tl,  & !:
61#if defined key_dynspg_rl
62      & bsfb_tl,  & !: Tangent linear of before barotropic streamfunction
63      & bsfn_tl,  & !: Tangent linear of now barotropic streamfunction
64      & bsfd_tl,  & !: Tangent linear of now trend of barotropic streamfunction
65#else
66      & sshb_tl,  & !: Tangent linear of before sea surface height
67      & sshn_tl,  & !: Tangent linear of now sea surface height
68      & ssha_tl,  & !: Tangent linear of after sea surface height
69      & sshu_tl,  & !: Tangent linear of sea surface height at u-point
70      & sshv_tl,  & !: Tangent linear of sea surface height at v-point
71      & sshbb_tl, & !: Tangent linear of before before sea surface height
72#endif
73      & gtu_tl,   & !: Tangent Linear of
74      & gsu_tl,   & !:
75      & gru_tl,   & !: t-, s- and rd horizontal gradient at u- and
76      & gtv_tl,   & !:   v-points at bottom ocean level
77      & gsv_tl,   & !:
78      & grv_tl,   & !:
79                    !:
80      & ub_ad,    & !: Adjoint of before u-component velocity
81      & un_ad,    & !: Adjoint of now u-component velocity
82      & ua_ad,    & !: Adjoint of after u-component velocity
83      & vb_ad,    & !: Adjoint of before v-component velocity
84      & vn_ad,    & !: Adjoint of now v-component velocity
85      & va_ad,    & !: Adjoint of after v-component velocity
86      & wn_ad,    & !: Adjoint of now w-component velocity
87      & rotb_ad,  & !: Adjoint of before relative vorticity
88      & rotn_ad,  & !: Adjoint of now relative vorticity
89      & hdivb_ad, & !: Adjoint of before horizontal divergence
90      & hdivn_ad, & !: Adjoint of now horizontal divergence
91      & tb_ad,    & !: Adjoint of before temperature
92      & tn_ad,    & !: Adjoint of now temperature
93      & ta_ad,    & !: Adjoint of after temperature
94      & sb_ad,    & !: Adjoint of before salinity
95      & sn_ad,    & !: Adjoint of now salinity
96      & sa_ad,    & !: Adjoint of after salinity
97      & rhd_ad,   & !: Adjoint of now in situ density anomaly 
98      & rhop_ad,  & !: Adjoint of potential volumic mass (kg/m3)
99      & rn2_ad,   & !: Adjoint of now Brunt-Vaisala frequency
100      & spgu_ad,  & !: Adjoint linear of horizontal surface pressure gradient
101      & spgv_ad,  & !:
102#if defined key_dynspg_rl
103      & bsfb_ad,  & !: Adjoint of before barotropic streamfunction
104      & bsfn_ad,  & !: Adjoint of now barotropic streamfunction
105      & bsfd_ad,  & !: Adjoint of now trend of barotropic streamfunction
106#else
107      & sshb_ad,  & !: Adjoint of before sea surface height
108      & sshn_ad,  & !: Adjoint of now sea surface height
109      & ssha_ad,  & !: Adjoint of after sea surface height
110      & sshu_ad,  & !: Adjoint of sea surface height at u-point
111      & sshv_ad,  & !: Adjoint of sea surface height at v-point
112      & sshbb_ad, & !: Adjoint of before before sea surface height
113#endif
114      & gtu_ad,   & !: Adjoint of
115      & gsu_ad,   & !:
116      & gru_ad,   & !: t-, s- and rd horizontal gradient at u- and
117      & gtv_ad,   & !:   v-points at bottom ocean level
118      & gsv_ad,   & !:
119      & grv_ad
120
121#if defined key_zdfddm
122!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
123!!!!  AW: The declaration/allocation/initialization of these variables
124!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
125!!!!      with NEMO.
126   PUBLIC &
127      & rrau_tl,  & !: Tangent Linear of heat/salt buoyancy flux ratio
128      & rrau_ad     !: Adjoint of heat/salt buoyancy flux ratio
129!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
130#endif
131
132   !! * Module variables
133   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: &
134      & ub_tl,    & !: Tangent linear of before u-component velocity
135      & un_tl,    & !: Tangent linear of now u-component velocity
136      & ua_tl,    & !: Tangent linear of after u-component velocity
137      & vb_tl,    & !: Tangent linear of before v-component velocity
138      & vn_tl,    & !: Tangent linear of now v-component velocity
139      & va_tl,    & !: Tangent linear of after v-component velocity
140      & wn_tl,    & !: Tangent linear of now w-component velocity
141      & rotb_tl,  & !: Tangent linear of before relative vorticity
142      & rotn_tl,  & !: Tangent linear of now relative vorticity
143      & hdivb_tl, & !: Tangent linear of before horizontal divergence
144      & hdivn_tl, & !: Tangent linear of now horizontal divergence
145      & tb_tl,    & !: Tangent linear of before temperature
146      & tn_tl,    & !: Tangent linear of now temperature
147      & ta_tl,    & !: Tangent linear of after temperature
148      & sb_tl,    & !: Tangent linear of before salinity
149      & sn_tl,    & !: Tangent linear of now salinity
150      & sa_tl,    & !: Tangent linear of after salinity
151      & rhd_tl,   & !: Tangent linear of now in situ density anomaly 
152      & rhop_tl,  & !: Tangent linear of potential volumic mass (kg/m3)
153      & rn2_tl      !: Tangent linear of now Brunt-Vaisala frequency
154
155   REAL(KIND=wp), DIMENSION(:,:), ALLOCATABLE :: &
156      & spgu_tl,  & !: Tangent of horizontal surface pressure gradient
157      & spgv_tl,  & !:
158#if defined key_dynspg_rl
159      & bsfb_tl,  & !: Tangent linear of before barotropic streamfunction
160      & bsfn_tl,  & !: Tangent linear of now barotropic streamfunction
161      & bsfd_tl,  & !: Tangent linear of now trend of barotropic streamfunction
162#else 
163      & sshb_tl,  & !: Tangent linear of before sea surface height
164      & sshn_tl,  & !: Tangent linear of now sea surface height
165      & ssha_tl,  & !: Tangent linear of after sea surface height
166      & sshu_tl,  & !: Tangent linear of sea surface height at u-point
167      & sshv_tl,  & !: Tangent linear of sea surface height at v-point
168      & sshbb_tl, & !: Tangent linear of before before sea surface height
169#endif
170      & gtu_tl,   & !: Tangent Linear of
171      & gsu_tl,   & !:
172      & gru_tl,   & !: t-, s- and rd horizontal gradient at u- and
173      & gtv_tl,   & !:   v-points at bottom ocean level
174      & gsv_tl,   & !:
175      & grv_tl       
176
177   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: &
178      & ub_ad,    & !: Adjoint of before u-component velocity
179      & un_ad,    & !: Adjoint of now u-component velocity
180      & ua_ad,    & !: Adjoint of after u-component velocity
181      & vb_ad,    & !: Adjoint of before v-component velocity
182      & vn_ad,    & !: Adjoint of now v-component velocity
183      & va_ad,    & !: Adjoint of after v-component velocity
184      & wn_ad,    & !: Adjoint of now w-component velocity
185      & rotb_ad,  & !: Adjoint of before relative vorticity
186      & rotn_ad,  & !: Adjoint of now relative vorticity
187      & hdivb_ad, & !: Adjoint of before horizontal divergence
188      & hdivn_ad, & !: Adjoint of now horizontal divergence
189      & tb_ad,    & !: Adjoint of before temperature
190      & tn_ad,    & !: Adjoint of now temperature
191      & ta_ad,    & !: Adjoint of after temperature
192      & sb_ad,    & !: Adjoint of before salinity
193      & sn_ad,    & !: Adjoint of now salinity
194      & sa_ad,    & !: Adjoint of after salinity
195      & rhd_ad,   & !: Adjoint of now in situ density anomaly 
196      & rhop_ad,  & !: Adjoint of potential volumic mass (kg/m3)
197      & rn2_ad      !: Adjoint of now Brunt-Vaisala frequency
198
199#if defined key_zdfddm
200!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
201!!!!  AW: The declaration/allocation/initialization of these variables
202!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
203!!!!      with NEMO.
204   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: &
205      & rrau_tl,  & !: Tangent Linear of heat/salt buoyancy flux ratio
206      & rrau_ad     !: Adjoint of heat/salt buoyancy flux ratio
207!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
208#endif
209
210   REAL(KIND=wp), DIMENSION(:,:), ALLOCATABLE :: &
211      & spgu_ad,  & !: Adjoint of horizontal surface pressure gradient
212      & spgv_ad,  & !:
213#if defined key_dynspg_rl
214      & bsfb_ad,  & !: Adjoint of before barotropic streamfunction
215      & bsfn_ad,  & !: Adjoint of now barotropic streamfunction
216      & bsfd_ad,  & !: Adjoint of now trend of barotropic streamfunction
217#else 
218      & sshb_ad,  & !: Adjoint of before sea surface height
219      & sshn_ad,  & !: Adjoint of now sea surface height
220      & ssha_ad,  & !: Adjoint of after sea surface height
221      & sshu_ad,  & !: Adjoint of sea surface height at u-point
222      & sshv_ad,  & !: Adjoint of sea surface height at v-point
223      & sshbb_ad, & !: Adjoint of before before sea surface height
224#endif
225      & gtu_ad,   & !: Adjoint of
226      & gsu_ad,   & !:
227      & gru_ad,   & !: t-, s- and rd horizontal gradient at u- and
228      & gtv_ad,   & !:   v-points at bottom ocean level
229      & gsv_ad,   & !:
230      & grv_ad
231
232CONTAINS
233
234   SUBROUTINE oce_tam_init( kindic )
235      !!-----------------------------------------------------------------------
236      !!
237      !!                  ***  ROUTINE oce_tam_init  ***
238      !!
239      !! ** Purpose : Allocate and initialize the tangent linear and
240      !!              adjoint arrays
241      !!
242      !! ** Method  : kindic = 0  allocate/initialize both tl and ad variables
243      !!              kindic = 1  allocate/initialize only tl variables
244      !!              kindic = 2  allocate/initialize only ad variables
245      !!
246      !! ** Action  :
247      !!                   
248      !! References :
249      !!
250      !! History :
251      !!        ! 07-07 (K. Mogensen) Initial version
252      !!        ! 08-07 (A. Vidard) Add missing variables
253      !!        ! 08-07 (A. Weaver) Add missing variables
254      !!        ! 09-03 (A. Weaver) Combine tl_init/ad_init into oce_tam_init,
255      !!                            make consistent with oce.F90 in NEMO
256      !!        ! 09-03 (A. Vidard) bug fixes on ssh*_ad alloc
257      !!-----------------------------------------------------------------------
258      !! * Arguments
259      INTEGER, INTENT(IN) :: &
260         & kindic        ! indicate which variables to allocate/initialize
261
262      !! * Local declarations
263      ! Allocate tangent linear variable arrays
264      ! ---------------------------------------
265     
266      IF ( kindic == 0 .OR. kindic == 1 ) THEN
267
268         IF ( .NOT. ALLOCATED(ub_tl) ) THEN
269
270            ALLOCATE( ub_tl(jpi,jpj,jpk) )
271
272         ENDIF
273         IF ( .NOT. ALLOCATED(un_tl) ) THEN
274
275            ALLOCATE( un_tl(jpi,jpj,jpk) )
276
277         ENDIF
278         IF ( .NOT. ALLOCATED(ua_tl) ) THEN
279
280            ALLOCATE( ua_tl(jpi,jpj,jpk) )
281
282         ENDIF
283         IF ( .NOT. ALLOCATED(vb_tl) ) THEN
284
285            ALLOCATE( vb_tl(jpi,jpj,jpk) )
286
287         ENDIF
288         IF ( .NOT. ALLOCATED(vn_tl) ) THEN
289
290            ALLOCATE( vn_tl(jpi,jpj,jpk) )
291
292         ENDIF
293         IF ( .NOT. ALLOCATED(va_tl) ) THEN
294
295            ALLOCATE( va_tl(jpi,jpj,jpk) )
296
297         ENDIF
298         IF ( .NOT. ALLOCATED(wn_tl) ) THEN
299
300            ALLOCATE( wn_tl(jpi,jpj,jpk) )
301           
302         ENDIF
303         IF ( .NOT. ALLOCATED(rotb_tl) ) THEN
304
305            ALLOCATE( rotb_tl(jpi,jpj,jpk) )
306           
307         ENDIF
308         IF ( .NOT. ALLOCATED(rotn_tl) ) THEN
309
310            ALLOCATE( rotn_tl(jpi,jpj,jpk) )
311           
312         ENDIF
313         IF ( .NOT. ALLOCATED(hdivb_tl) ) THEN
314
315            ALLOCATE( hdivb_tl(jpi,jpj,jpk) )
316           
317         ENDIF
318         IF ( .NOT. ALLOCATED(hdivn_tl) ) THEN
319
320            ALLOCATE( hdivn_tl(jpi,jpj,jpk) )
321           
322         ENDIF
323         IF ( .NOT. ALLOCATED(tb_tl) ) THEN
324
325            ALLOCATE( tb_tl(jpi,jpj,jpk) )
326           
327         ENDIF
328         IF ( .NOT. ALLOCATED(tn_tl) ) THEN
329
330            ALLOCATE( tn_tl(jpi,jpj,jpk) )
331           
332         ENDIF
333         IF ( .NOT. ALLOCATED(ta_tl) ) THEN
334
335            ALLOCATE( ta_tl(jpi,jpj,jpk) )
336           
337         ENDIF
338         IF ( .NOT. ALLOCATED(sb_tl) ) THEN
339
340            ALLOCATE( sb_tl(jpi,jpj,jpk) )
341           
342         ENDIF
343         IF ( .NOT. ALLOCATED(sn_tl) ) THEN
344
345            ALLOCATE( sn_tl(jpi,jpj,jpk) )
346           
347         ENDIF
348         IF ( .NOT. ALLOCATED(sa_tl) ) THEN
349
350            ALLOCATE( sa_tl(jpi,jpj,jpk) )
351           
352         ENDIF
353         IF ( .NOT. ALLOCATED(rhd_tl) ) THEN
354
355            ALLOCATE( rhd_tl(jpi,jpj,jpk) )
356           
357         ENDIF
358         IF ( .NOT. ALLOCATED(rhop_tl) ) THEN
359
360            ALLOCATE( rhop_tl(jpi,jpj,jpk) )
361           
362         ENDIF
363         IF ( .NOT. ALLOCATED(rn2_tl) ) THEN
364
365            ALLOCATE( rn2_tl(jpi,jpj,jpk) )
366
367         ENDIF
368         IF ( .NOT. ALLOCATED(spgu_tl) ) THEN
369
370            ALLOCATE( spgu_tl(jpi,jpj) )
371           
372         ENDIF
373         IF ( .NOT. ALLOCATED(spgv_tl) ) THEN
374
375            ALLOCATE( spgv_tl(jpi,jpj) )
376           
377         ENDIF
378#if defined key_dynspg_rl
379         IF ( .NOT. ALLOCATED(bsfb_tl) ) THEN
380
381            ALLOCATE( bsfb_tl(jpi,jpj) )
382         
383         ENDIF
384         IF ( .NOT. ALLOCATED(bsfn_tl) ) THEN
385
386            ALLOCATE( bsfn_tl(jpi,jpj) )
387         
388         ENDIF
389         IF ( .NOT. ALLOCATED(bsfd_tl) ) THEN
390
391            ALLOCATE( bsfd_tl(jpi,jpj) )
392         
393         ENDIF
394#else
395         IF (.NOT. ALLOCATED(sshb_tl) ) THEN
396         
397            ALLOCATE( sshb_tl(jpi,jpj) )
398
399         ENDIF
400         IF (.NOT. ALLOCATED(sshn_tl) ) THEN
401         
402            ALLOCATE( sshn_tl(jpi,jpj) )
403
404         ENDIF
405         IF (.NOT. ALLOCATED(ssha_tl) ) THEN
406         
407            ALLOCATE( ssha_tl(jpi,jpj) )
408
409         ENDIF
410         IF (.NOT. ALLOCATED(sshu_tl) ) THEN
411         
412            ALLOCATE( sshu_tl(jpi,jpj) )
413
414         ENDIF
415         IF (.NOT. ALLOCATED(sshv_tl) ) THEN
416         
417            ALLOCATE( sshv_tl(jpi,jpj) )
418
419         ENDIF
420         IF (.NOT. ALLOCATED(sshbb_tl) ) THEN
421         
422            ALLOCATE( sshbb_tl(jpi,jpj) )
423
424         ENDIF
425#endif     
426         IF ( .NOT. ALLOCATED(gtu_tl) ) THEN
427
428            ALLOCATE( gtu_tl(jpi,jpj) )
429
430         ENDIF
431         IF ( .NOT. ALLOCATED(gtv_tl) ) THEN
432
433            ALLOCATE( gtv_tl(jpi,jpj) )
434
435         ENDIF
436         IF ( .NOT. ALLOCATED(gsu_tl) ) THEN
437
438            ALLOCATE( gsu_tl(jpi,jpj) )
439
440         ENDIF
441         IF ( .NOT. ALLOCATED(gsv_tl) ) THEN
442
443            ALLOCATE( gsv_tl(jpi,jpj) )
444
445         ENDIF
446         IF ( .NOT. ALLOCATED(gru_tl) ) THEN
447
448            ALLOCATE( gru_tl(jpi,jpj) )
449
450         ENDIF
451         IF ( .NOT. ALLOCATED(grv_tl) ) THEN
452
453            ALLOCATE( grv_tl(jpi,jpj) )
454
455         ENDIF
456
457#if defined key_zdfddm
458!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
459!!!!  AW: The declaration/allocation/initialization of these variables
460!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
461!!!!      with NEMO.
462         IF ( .NOT. ALLOCATED(rrau_tl) ) THEN
463
464            ALLOCATE( rrau_tl(jpi,jpj,jpk) )
465           
466         ENDIF
467!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
468#endif
469
470         ! Initialize tangent linear variable arrays to zero
471         ! -------------------------------------------------
472
473         ub_tl   (:,:,:) = 0.0_wp
474         un_tl   (:,:,:) = 0.0_wp
475         ua_tl   (:,:,:) = 0.0_wp
476         vb_tl   (:,:,:) = 0.0_wp
477         vn_tl   (:,:,:) = 0.0_wp
478         va_tl   (:,:,:) = 0.0_wp
479         wn_tl   (:,:,:) = 0.0_wp
480         rotb_tl (:,:,:) = 0.0_wp
481         rotn_tl (:,:,:) = 0.0_wp
482         hdivb_tl(:,:,:) = 0.0_wp
483         hdivn_tl(:,:,:) = 0.0_wp
484         tb_tl   (:,:,:) = 0.0_wp
485         tn_tl   (:,:,:) = 0.0_wp
486         ta_tl   (:,:,:) = 0.0_wp
487         sb_tl   (:,:,:) = 0.0_wp
488         sn_tl   (:,:,:) = 0.0_wp
489         sa_tl   (:,:,:) = 0.0_wp
490         rhd_tl  (:,:,:) = 0.0_wp
491         rhop_tl (:,:,:) = 0.0_wp
492         rn2_tl  (:,:,:) = 0.0_wp
493
494         spgu_tl(:,:)  = 0.0_wp
495         spgv_tl(:,:)  = 0.0_wp
496
497#if defined key_dynspg_rl
498         bsfb_tl(:,:)  = 0.0_wp
499         bsfn_tl(:,:)  = 0.0_wp
500         bsfd_tl(:,:)  = 0.0_wp
501#else
502         sshb_tl(:,:)  = 0.0_wp
503         sshn_tl(:,:)  = 0.0_wp
504         ssha_tl(:,:)  = 0.0_wp
505         sshu_tl(:,:)  = 0.0_wp
506         sshv_tl(:,:)  = 0.0_wp
507         sshbb_tl(:,:) = 0.0_wp
508#endif
509         gtu_tl (:,:)  = 0.0_wp
510         gsu_tl (:,:)  = 0.0_wp
511         gru_tl (:,:)  = 0.0_wp
512         gtv_tl (:,:)  = 0.0_wp
513         gsv_tl (:,:)  = 0.0_wp
514         grv_tl (:,:)  = 0.0_wp
515
516#if defined key_zdfddm
517!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
518!!!!  AW: The declaration/allocation/initialization of these variables
519!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
520!!!!      with NEMO.
521         rrau_tl(:,:,:) = 0.0_wp
522!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
523#endif
524
525      ENDIF
526
527      IF ( kindic == 0 .OR. kindic == 2 ) THEN
528
529         ! Allocate adjoint variable arrays
530         ! --------------------------------
531     
532         IF ( .NOT. ALLOCATED(ub_ad) ) THEN
533
534            ALLOCATE( ub_ad(jpi,jpj,jpk) )
535
536         ENDIF
537         IF ( .NOT. ALLOCATED(un_ad) ) THEN
538
539            ALLOCATE( un_ad(jpi,jpj,jpk) )
540
541         ENDIF
542         IF ( .NOT. ALLOCATED(ua_ad) ) THEN
543
544            ALLOCATE( ua_ad(jpi,jpj,jpk) )
545
546         ENDIF
547         IF ( .NOT. ALLOCATED(vb_ad) ) THEN
548
549            ALLOCATE( vb_ad(jpi,jpj,jpk) )
550
551         ENDIF
552         IF ( .NOT. ALLOCATED(vn_ad) ) THEN
553
554            ALLOCATE( vn_ad(jpi,jpj,jpk) )
555
556         ENDIF
557         IF ( .NOT. ALLOCATED(va_ad) ) THEN
558
559            ALLOCATE( va_ad(jpi,jpj,jpk) )
560
561         ENDIF
562         IF ( .NOT. ALLOCATED(wn_ad) ) THEN
563
564            ALLOCATE( wn_ad(jpi,jpj,jpk) )
565           
566         ENDIF
567         IF ( .NOT. ALLOCATED(rotb_ad) ) THEN
568
569            ALLOCATE( rotb_ad(jpi,jpj,jpk) )
570           
571         ENDIF
572         IF ( .NOT. ALLOCATED(rotn_ad) ) THEN
573
574            ALLOCATE( rotn_ad(jpi,jpj,jpk) )
575           
576         ENDIF
577         IF ( .NOT. ALLOCATED(hdivb_ad) ) THEN
578
579            ALLOCATE( hdivb_ad(jpi,jpj,jpk) )
580           
581         ENDIF
582         IF ( .NOT. ALLOCATED(hdivn_ad) ) THEN
583
584            ALLOCATE( hdivn_ad(jpi,jpj,jpk) )
585           
586         ENDIF
587         IF ( .NOT. ALLOCATED(tb_ad) ) THEN
588
589            ALLOCATE( tb_ad(jpi,jpj,jpk) )
590           
591         ENDIF
592         IF ( .NOT. ALLOCATED(tn_ad) ) THEN
593
594            ALLOCATE( tn_ad(jpi,jpj,jpk) )
595           
596         ENDIF
597         IF ( .NOT. ALLOCATED(ta_ad) ) THEN
598
599            ALLOCATE( ta_ad(jpi,jpj,jpk) )
600           
601         ENDIF
602         IF ( .NOT. ALLOCATED(sb_ad) ) THEN
603
604            ALLOCATE( sb_ad(jpi,jpj,jpk) )
605           
606         ENDIF
607         IF ( .NOT. ALLOCATED(sn_ad) ) THEN
608
609            ALLOCATE( sn_ad(jpi,jpj,jpk) )
610           
611         ENDIF
612         IF ( .NOT. ALLOCATED(sa_ad) ) THEN
613
614            ALLOCATE( sa_ad(jpi,jpj,jpk) )
615           
616         ENDIF
617         IF ( .NOT. ALLOCATED(rhd_ad) ) THEN
618
619            ALLOCATE( rhd_ad(jpi,jpj,jpk) )
620           
621         ENDIF
622         IF ( .NOT. ALLOCATED(rhop_ad) ) THEN
623
624            ALLOCATE( rhop_ad(jpi,jpj,jpk) )
625           
626         ENDIF
627         IF ( .NOT. ALLOCATED(rn2_ad) ) THEN
628
629            ALLOCATE( rn2_ad(jpi,jpj,jpk) )
630
631         ENDIF
632         IF ( .NOT. ALLOCATED(spgu_ad) ) THEN
633
634            ALLOCATE( spgu_ad(jpi,jpj) )
635           
636         ENDIF
637         IF ( .NOT. ALLOCATED(spgv_ad) ) THEN
638
639            ALLOCATE( spgv_ad(jpi,jpj) )
640           
641         ENDIF
642#if defined key_dynspg_rl
643         IF ( .NOT. ALLOCATED(bsfb_ad) ) THEN
644
645            ALLOCATE( bsfb_ad(jpi,jpj) )
646         
647         ENDIF
648         IF ( .NOT. ALLOCATED(bsfn_ad) ) THEN
649
650            ALLOCATE( bsfn_ad(jpi,jpj) )
651         
652         ENDIF
653         IF ( .NOT. ALLOCATED(bsfd_ad) ) THEN
654
655            ALLOCATE( bsfd_ad(jpi,jpj) )
656         
657         ENDIF
658#else
659         IF (.NOT. ALLOCATED(sshb_ad) ) THEN
660         
661            ALLOCATE( sshb_ad(jpi,jpj) )
662
663         ENDIF
664         IF (.NOT. ALLOCATED(sshn_ad) ) THEN
665         
666            ALLOCATE( sshn_ad(jpi,jpj) )
667
668         ENDIF
669         IF (.NOT. ALLOCATED(ssha_ad) ) THEN
670         
671            ALLOCATE( ssha_ad(jpi,jpj) )
672
673         ENDIF
674         IF (.NOT. ALLOCATED(sshu_ad) ) THEN
675         
676            ALLOCATE( sshu_ad(jpi,jpj) )
677
678         ENDIF
679         IF (.NOT. ALLOCATED(sshv_ad) ) THEN
680         
681            ALLOCATE( sshv_ad(jpi,jpj) )
682
683         ENDIF
684         IF (.NOT. ALLOCATED(sshbb_ad) ) THEN
685         
686            ALLOCATE( sshbb_ad(jpi,jpj) )
687
688         ENDIF
689#endif     
690         IF ( .NOT. ALLOCATED(gtu_ad) ) THEN
691
692            ALLOCATE( gtu_ad(jpi,jpj) )
693
694         ENDIF
695         IF ( .NOT. ALLOCATED(gtv_ad) ) THEN
696
697            ALLOCATE( gtv_ad(jpi,jpj) )
698
699         ENDIF
700         IF ( .NOT. ALLOCATED(gsu_ad) ) THEN
701
702            ALLOCATE( gsu_ad(jpi,jpj) )
703
704         ENDIF
705         IF ( .NOT. ALLOCATED(gsv_ad) ) THEN
706
707            ALLOCATE( gsv_ad(jpi,jpj) )
708
709         ENDIF
710         IF ( .NOT. ALLOCATED(gru_ad) ) THEN
711
712            ALLOCATE( gru_ad(jpi,jpj) )
713
714         ENDIF
715         IF ( .NOT. ALLOCATED(grv_ad) ) THEN
716
717            ALLOCATE( grv_ad(jpi,jpj) )
718
719         ENDIF
720
721#if defined key_zdfddm
722!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
723!!!!  AW: The declaration/allocation/initialization of these variables
724!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
725!!!!      with NEMO.
726         IF ( .NOT. ALLOCATED(rrau_ad) ) THEN
727
728            ALLOCATE( rrau_ad(jpi,jpj,jpk) )
729           
730         ENDIF
731!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
732#endif
733
734         ! Initialize adjoint variable arrays to zero
735         ! ------------------------------------------
736
737         ub_ad   (:,:,:) = 0.0_wp
738         un_ad   (:,:,:) = 0.0_wp
739         ua_ad   (:,:,:) = 0.0_wp
740         vb_ad   (:,:,:) = 0.0_wp
741         vn_ad   (:,:,:) = 0.0_wp
742         va_ad   (:,:,:) = 0.0_wp
743         wn_ad   (:,:,:) = 0.0_wp
744         rotb_ad (:,:,:) = 0.0_wp
745         rotn_ad (:,:,:) = 0.0_wp
746         hdivb_ad(:,:,:) = 0.0_wp
747         hdivn_ad(:,:,:) = 0.0_wp
748         tb_ad   (:,:,:) = 0.0_wp
749         tn_ad   (:,:,:) = 0.0_wp
750         ta_ad   (:,:,:) = 0.0_wp
751         sb_ad   (:,:,:) = 0.0_wp
752         sn_ad   (:,:,:) = 0.0_wp
753         sa_ad   (:,:,:) = 0.0_wp
754         rhd_ad  (:,:,:) = 0.0_wp
755         rhop_ad (:,:,:) = 0.0_wp
756         rn2_ad  (:,:,:) = 0.0_wp
757
758         spgu_ad(:,:) = 0.0_wp
759         spgv_ad(:,:) = 0.0_wp
760#if defined key_dynspg_rl
761         bsfn_ad(:,:) = 0.0_wp
762         bsfb_ad(:,:) = 0.0_wp
763         bsfd_ad(:,:) = 0.0_wp
764#else
765         sshb_ad(:,:)  = 0.0_wp
766         sshn_ad(:,:)  = 0.0_wp
767         ssha_ad(:,:)  = 0.0_wp
768         sshu_ad(:,:)  = 0.0_wp
769         sshv_ad(:,:)  = 0.0_wp
770         sshbb_ad(:,:) = 0.0_wp
771#endif
772         gtu_ad (:,:) = 0.0_wp
773         gsu_ad (:,:) = 0.0_wp
774         gru_ad (:,:) = 0.0_wp
775         gtv_ad (:,:) = 0.0_wp
776         gsv_ad (:,:) = 0.0_wp
777         grv_ad (:,:) = 0.0_wp
778
779#if defined key_zdfddm
780!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
781!!!!  AW: The declaration/allocation/initialization of these variables
782!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
783!!!!      with NEMO.
784         rrau_ad  (:,:,:) = 0.0_wp
785!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
786#endif
787
788      ENDIF
789
790   END SUBROUTINE oce_tam_init
791   SUBROUTINE oce_tam_deallocate ( kindic )
792      !!-----------------------------------------------------------------------
793      !!
794      !!                  ***  ROUTINE oce_tam_deallocate  ***
795      !!
796      !! ** Purpose : Deallocate the tangent linear and
797      !!              adjoint arrays
798      !!
799      !! ** Method  : kindic = 0  deallocate both tl and ad variables
800      !!              kindic = 1  deallocate only tl variables
801      !!              kindic = 2  deallocate only ad variables
802      !!
803      !! ** Action  :
804      !!                   
805      !! References :
806      !!
807      !! History :
808      !!        ! 2010-06 (A. Vidard) initial version
809      !!-----------------------------------------------------------------------
810      !! * Arguments
811      INTEGER, INTENT(IN) :: &
812         & kindic        ! indicate which variables to allocate/initialize
813     
814      !! * Local declarations
815      ! Dellocate tangent linear variable arrays
816      ! ---------------------------------------
817     
818      IF ( kindic == 0 .OR. kindic == 1 ) THEN
819
820         IF ( ALLOCATED(ub_tl) ) DEALLOCATE( ub_tl )
821
822         IF ( ALLOCATED(un_tl) ) DEALLOCATE( un_tl )
823
824         IF ( ALLOCATED(ua_tl) ) DEALLOCATE( ua_tl )
825
826         IF ( ALLOCATED(vb_tl) ) DEALLOCATE( vb_tl )
827
828         IF ( ALLOCATED(vn_tl) ) DEALLOCATE( vn_tl )
829
830         IF ( ALLOCATED(va_tl) ) DEALLOCATE( va_tl )
831
832         IF ( ALLOCATED(wn_tl) ) DEALLOCATE( wn_tl )
833
834         IF ( ALLOCATED(rotb_tl) ) DEALLOCATE( rotb_tl )
835           
836         IF ( ALLOCATED(rotn_tl) ) DEALLOCATE( rotn_tl )
837           
838         IF ( ALLOCATED(hdivb_tl) ) DEALLOCATE( hdivb_tl )
839
840         IF ( ALLOCATED(hdivn_tl) ) DEALLOCATE( hdivn_tl )
841           
842         IF ( ALLOCATED(tb_tl) ) DEALLOCATE( tb_tl )
843           
844         IF ( ALLOCATED(tn_tl) ) DEALLOCATE( tn_tl )
845
846         IF ( ALLOCATED(ta_tl) ) DEALLOCATE( ta_tl )
847           
848         IF ( ALLOCATED(sb_tl) ) DEALLOCATE( sb_tl )
849
850         IF ( ALLOCATED(sn_tl) ) DEALLOCATE( sn_tl )
851
852         IF ( ALLOCATED(sa_tl) ) DEALLOCATE( sa_tl )
853           
854         IF ( ALLOCATED(rhd_tl) ) DEALLOCATE( rhd_tl )
855           
856         IF ( ALLOCATED(rhop_tl) ) DEALLOCATE( rhop_tl )
857
858         IF ( ALLOCATED(rn2_tl) ) DEALLOCATE( rn2_tl )
859
860         IF ( ALLOCATED(spgu_tl) ) DEALLOCATE( spgu_tl )
861           
862         IF ( ALLOCATED(spgv_tl) ) DEALLOCATE( spgv_tl )
863           
864#if defined key_dynspg_rl
865         IF ( ALLOCATED(bsfb_tl) ) DEALLOCATE( bsfb_tl )
866         
867         IF ( ALLOCATED(bsfn_tl) ) DEALLOCATE( bsfn_tl )
868         
869         IF ( ALLOCATED(bsfd_tl) ) DEALLOCATE( bsfd_tl )
870         
871#else
872         IF (ALLOCATED(sshb_tl) ) DEALLOCATE( sshb_tl )
873
874         IF (ALLOCATED(sshn_tl) ) DEALLOCATE( sshn_tl )
875
876         IF (ALLOCATED(ssha_tl) ) DEALLOCATE( ssha_tl )
877
878         IF (ALLOCATED(sshu_tl) ) DEALLOCATE( sshu_tl )
879
880         IF (ALLOCATED(sshv_tl) ) DEALLOCATE( sshv_tl )
881
882         IF (ALLOCATED(sshbb_tl) ) DEALLOCATE( sshbb_tl )
883
884#endif     
885         IF ( ALLOCATED(gtu_tl) ) DEALLOCATE( gtu_tl )
886
887         IF ( ALLOCATED(gtv_tl) ) DEALLOCATE( gtv_tl )
888
889         IF ( ALLOCATED(gsu_tl) ) DEALLOCATE( gsu_tl )
890
891         IF ( ALLOCATED(gsv_tl) ) DEALLOCATE( gsv_tl )
892
893         IF ( ALLOCATED(gru_tl) ) DEALLOCATE( gru_tl )
894
895         IF ( ALLOCATED(grv_tl) ) DEALLOCATE( grv_tl )
896
897
898
899#if defined key_zdfddm
900!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
901!!!!  AW: The declaration/allocation/initialization of these variables
902!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
903!!!!      with NEMO.
904         IF ( ALLOCATED(rrau_tl) ) DEALLOCATE( rrau_tl )
905           
906
907!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
908#endif
909
910
911      ENDIF
912
913      IF ( kindic == 0 .OR. kindic == 2 ) THEN
914
915         ! Allocate adjoint variable arrays
916         ! --------------------------------
917     
918         IF ( ALLOCATED(ub_ad) ) DEALLOCATE( ub_ad )
919
920         IF ( ALLOCATED(un_ad) ) DEALLOCATE( un_ad )
921
922         IF ( ALLOCATED(ua_ad) ) DEALLOCATE( ua_ad )
923
924         IF ( ALLOCATED(vb_ad) ) DEALLOCATE( vb_ad )
925
926         IF ( ALLOCATED(vn_ad) ) DEALLOCATE( vn_ad )
927
928         IF ( ALLOCATED(va_ad) ) DEALLOCATE( va_ad )
929
930         IF ( ALLOCATED(wn_ad) ) DEALLOCATE( wn_ad )
931           
932         IF ( ALLOCATED(rotb_ad) ) DEALLOCATE( rotb_ad )
933
934         IF ( ALLOCATED(rotn_ad) ) DEALLOCATE( rotn_ad )
935
936         IF ( ALLOCATED(hdivb_ad) ) DEALLOCATE( hdivb_ad )
937
938         IF ( ALLOCATED(hdivn_ad) ) DEALLOCATE( hdivn_ad )
939
940         IF ( ALLOCATED(tb_ad) ) DEALLOCATE( tb_ad )
941           
942         IF ( ALLOCATED(tn_ad) ) DEALLOCATE( tn_ad )
943
944         IF ( ALLOCATED(ta_ad) ) DEALLOCATE( ta_ad )
945
946         IF ( ALLOCATED(sb_ad) ) DEALLOCATE( sb_ad )
947           
948         IF ( ALLOCATED(sn_ad) ) DEALLOCATE( sn_ad )
949           
950         IF ( ALLOCATED(sa_ad) ) DEALLOCATE( sa_ad )
951           
952         IF ( ALLOCATED(rhd_ad) ) DEALLOCATE( rhd_ad )
953           
954         IF ( ALLOCATED(rhop_ad) ) DEALLOCATE( rhop_ad )
955           
956         IF ( ALLOCATED(rn2_ad) ) DEALLOCATE( rn2_ad )
957
958         IF ( ALLOCATED(spgu_ad) ) DEALLOCATE( spgu_ad )
959
960         IF ( ALLOCATED(spgv_ad) ) DEALLOCATE( spgv_ad )
961
962#if defined key_dynspg_rl
963         IF ( ALLOCATED(bsfb_ad) ) DEALLOCATE( bsfb_ad )
964         
965         IF ( ALLOCATED(bsfn_ad) ) DEALLOCATE( bsfn_ad )
966
967         IF ( ALLOCATED(bsfd_ad) ) DEALLOCATE( bsfd_ad )
968
969#else
970         IF ( ALLOCATED(sshb_ad) ) DEALLOCATE( sshb_ad )
971
972         IF ( ALLOCATED(sshn_ad) ) DEALLOCATE( sshn_ad )
973
974         IF ( ALLOCATED(ssha_ad) ) DEALLOCATE( ssha_ad )
975
976         IF ( ALLOCATED(sshu_ad) ) DEALLOCATE( sshu_ad )
977
978         IF ( ALLOCATED(sshv_ad) ) DEALLOCATE( sshv_ad )
979
980         IF ( ALLOCATED(sshbb_ad) ) DEALLOCATE( sshbb_ad )
981
982#endif     
983         IF ( ALLOCATED(gtu_ad) ) DEALLOCATE( gtu_ad )
984
985         IF ( ALLOCATED(gtv_ad) ) DEALLOCATE( gtv_ad )
986
987         IF ( ALLOCATED(gsu_ad) ) DEALLOCATE( gsu_ad )
988
989         IF ( ALLOCATED(gsv_ad) ) DEALLOCATE( gsv_ad )
990
991         IF ( ALLOCATED(gru_ad) ) DEALLOCATE( gru_ad )
992
993         IF ( ALLOCATED(grv_ad) ) DEALLOCATE( grv_ad )
994
995
996
997#if defined key_zdfddm
998!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
999!!!!  AW: The declaration/allocation/initialization of these variables
1000!!!!      should be moved to a new module zdf_ddm_tam_init to be consistent
1001!!!!      with NEMO.
1002         IF ( ALLOCATED(rrau_ad) ) DEALLOCATE( rrau_ad )
1003!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1004#endif
1005
1006      ENDIF
1007
1008   END SUBROUTINE oce_tam_deallocate
1009     
1010END MODULE oce_tam
Note: See TracBrowser for help on using the repository browser.