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.
trj_tam.F90 in tags/TAM_v3_0/NEMOTAM/OPATAM_SRC – NEMO

source: tags/TAM_v3_0/NEMOTAM/OPATAM_SRC/trj_tam.F90 @ 8434

Last change on this file since 8434 was 1885, checked in by rblod, 14 years ago

add TAM sources

File size: 25.5 KB
Line 
1MODULE trj_tam
2#ifdef key_tam
3   !!======================================================================
4   !!                       ***  MODULE trj_tam ***
5   !! NEMOVAR trajectory: Allocate and read the trajectory for linearzation
6   !!======================================================================
7
8   !!----------------------------------------------------------------------
9   !!----------------------------------------------------------------------
10   !!   bkg_init : Initialize the background fields from disk
11   !!----------------------------------------------------------------------
12   !! * Modules used   
13   USE par_kind, ONLY : & ! Precision variables
14      & wp
15   USE par_oce, ONLY : &  ! Ocean space and time domain variables
16      & jpi, jpj, jpk
17   USE tamtrj             ! Parameters for the assmilation interface
18   USE in_out_manager, ONLY : & ! I/O manager
19      & lwp 
20   USE oce                ! Model variables
21   USE zdf_oce            ! Vertical mixing variables
22   USE zdfddm             ! Double diffusion mixing parameterization
23   USE ldftra_oce         ! Lateral tracer mixing coefficient defined in memory
24   USE ldfslp             ! Slopes of neutral surfaces
25   USE tradmp             ! Tracer damping
26   USE sbc_oce            ! Ocean surface boundary conditions
27   USE iom                ! Library to read input files
28
29   USE zdfmxl, ONLY : &   ! mixed layer depth
30      & hmlp
31   USE divcur             ! horizontal divergence and relative vorticity
32   USE wzvmod             !  vertical velocity
33 
34   IMPLICIT NONE
35
36   !! * Routine accessibility
37   PRIVATE
38   PUBLIC &
39      & trj_rea,     &   !: Read trajectory at time step kstep into now fields
40      & trj_rd_spl,  &   !: Read simple data (without interpolation)
41      & trj_wri_spl      !: Write simple data (without interpolation)
42
43   !! * Module variables
44   INTEGER, SAVE :: inumtrj1 = -1, inumtrj2 = -1
45   REAL(wp), SAVE :: &
46      & stpr1, &
47      & stpr2
48   REAL(wp), ALLOCATABLE, DIMENSION(:,:), SAVE :: &
49      & empr1,    &
50      & empsr1,   &   
51      & empr2,    &
52      & empsr2
53#if defined key_traldf_eiv
54#if defined key_traldf_c3d
55   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: &
56#elif defined key_traldf_c2d
57   REAL(wp), ALLOCATABLE, DIMENSION(:,:), SAVE :: &
58#elif defined key_traldf_c1d
59   REAL(wp), ALLOCATABLE, DIMENSION(:), SAVE :: &
60#else
61   REAL(wp) ::
62#endif
63      & aeiur1,   &
64      & aeivr1,   &
65      & aeiwr1,   & 
66      & aeiur2,   &
67      & aeivr2,   &
68      & aeiwr2
69#endif
70  REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: &
71      & unr1,     &
72      & vnr1,     &
73      & tnr1,     &
74      & snr1,     &
75      & avmur1,   &
76      & avmvr1,   &
77      & avtr1,    &
78      & uslpr1,   &
79      & vslpr1,   &
80      & wslpir1,  &
81      & wslpjr1,  &
82      & avsr1,    &
83      & tar1,     &
84      & sar1,     &
85      & tbr1,     &
86      & sbr1,     &
87      & unr2,     &
88      & vnr2,     &
89      & tnr2,     &
90      & snr2,     &
91      & avmur2,   &
92      & avmvr2,   &
93      & avtr2,    &
94      & uslpr2,   &
95      & vslpr2,   &
96      & wslpir2,  &
97      & wslpjr2,  &
98      & avsr2,    &
99      & tar2,     &
100      & sar2,     &
101      & tbr2,     &
102      & sbr2
103  REAL(wp), ALLOCATABLE, DIMENSION(:,:), SAVE :: &
104      & hmlp1,    &
105      & hmlp2 
106     
107CONTAINS
108
109   SUBROUTINE trj_rea( kstp, kdir )
110      !!-----------------------------------------------------------------------
111      !!
112      !!                  ***  ROUTINE trj_reat  ***
113      !!
114      !! ** Purpose : Read from file the trjectory from the outer loop
115      !!
116      !! ** Method  : IOM
117      !!
118      !! ** Action  :
119      !!                   
120      !! References :
121      !!
122      !! History :
123      !!        ! 08-05 (K. Mogensen) Initial version
124      !!        ! 09-03 (F.Vigilant) Add reading of hmlp and calls (divcur, wzvmod)
125      !!-----------------------------------------------------------------------
126      !! * Modules used
127      !! * Arguments
128      INTEGER, INTENT(in) :: &
129         & kstp, &           ! Step for requested trajectory
130         & kdir              ! Direction for stepping (1 forward, -1 backward)
131      !! * Local declarations
132      CHARACTER (LEN=100) :: &
133         & cl_asmtrj
134      INTEGER :: &
135         & inrcm,  &
136         & inrcp,  &
137         & inrc,   &
138         & istpr1, &
139         & istpr2, &
140    & it
141      REAL(KIND=wp) :: &
142         & zwtr1, &
143         & zwtr2, &
144         & zden,  &
145         & zstp
146
147      ! Initialize data and open file
148      !! if step time is corresponding to a saved state
149      IF ( ( MOD( kstp - nit000 + 1, nittrjfrq ) == 0 )  ) THEN       
150
151         it = kstp - nit000 + 1
152
153         IF ( inumtrj1 == -1 ) THEN
154
155            ! Define the input file
156            WRITE(cl_asmtrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_asmtrj ), '_', it
157
158            !         WRITE(cl_asmtrj, FMT='(A,".nc")' ) TRIM( c_asmtrj )
159            cl_asmtrj = TRIM( cl_asmtrj )
160
161            IF(lwp) THEN
162
163               WRITE(numout,*)
164               WRITE(numout,*)'Reading non-linear fields from : ',TRIM(cl_asmtrj)
165               WRITE(numout,*)
166
167            ENDIF
168            CALL iom_open( cl_asmtrj, inumtrj1 )     
169            if ( inumtrj1 == -1)  CALL ctl_stop( 'No tam_trajectory cl_amstrj found' )
170   
171            ALLOCATE( &
172               & empr1(jpi,jpj),  &
173               & empsr1(jpi,jpj), &
174               & empr2(jpi,jpj),  &
175               & empsr2(jpi,jpj)  &
176               & )
177
178            ALLOCATE( &
179               & unr1(jpi,jpj,jpk),     &
180               & vnr1(jpi,jpj,jpk),     &
181               & tnr1(jpi,jpj,jpk),     &
182               & snr1(jpi,jpj,jpk),     &
183               & avmur1(jpi,jpj,jpk),   &
184               & avmvr1(jpi,jpj,jpk),   &
185               & avtr1(jpi,jpj,jpk),    &
186               & tar1(jpi,jpj,jpk),     &
187               & sar1(jpi,jpj,jpk),     &
188               & tbr1(jpi,jpj,jpk),     &
189               & sbr1(jpi,jpj,jpk),     &
190               & unr2(jpi,jpj,jpk),     &
191               & vnr2(jpi,jpj,jpk),     &
192               & tnr2(jpi,jpj,jpk),     &
193               & snr2(jpi,jpj,jpk),     &
194               & avmur2(jpi,jpj,jpk),   &
195               & avmvr2(jpi,jpj,jpk),   &
196               & avtr2(jpi,jpj,jpk),    &
197               & tar2(jpi,jpj,jpk),     &
198               & sar2(jpi,jpj,jpk),     &
199               & tbr2(jpi,jpj,jpk),     &
200               & sbr2(jpi,jpj,jpk)      &
201               & )
202
203#if defined key_traldf_eiv
204#if defined key_traldf_c3d
205#elif defined key_traldf_c2d
206            ALLOCATE( &
207               & aeiur1(jpi,jpj), &
208               & aeivr1(jpi,jpj), &
209               & aeiwr1(jpi,jpj), &
210               & aeiur2(jpi,jpj), &
211               & aeivr2(jpi,jpj), &
212               & aeiwr2(jpi,jpj)  &
213               & )
214#elif defined key_traldf_c1d
215#endif
216#endif
217
218#if defined key_ldfslp
219            ALLOCATE( &
220               & uslpr1(jpi,jpj,jpk),   &
221               & vslpr1(jpi,jpj,jpk),   &
222               & wslpir1(jpi,jpj,jpk),  &
223               & wslpjr1(jpi,jpj,jpk),  &
224               & uslpr2(jpi,jpj,jpk),   &
225               & vslpr2(jpi,jpj,jpk),   &
226               & wslpir2(jpi,jpj,jpk),  &
227               & wslpjr2(jpi,jpj,jpk)   &
228               & )
229#endif
230
231#if defined key_zdfddm
232            ALLOCATE( &
233               & avsr1(jpi,jpj,jpk),    &
234               & avsr2(jpi,jpj,jpk)     &
235               & )
236#endif
237
238#if defined key_tradmp
239            ALLOCATE( &
240               & hmlp1(jpi,jpj),    &
241               & hmlp2(jpi,jpj)     &
242               & )
243#endif
244
245         ENDIF
246
247
248      ! Read records
249
250         inrcm = INT( ( kstp - nit000 + 1 ) / nittrjfrq ) + 1
251
252         ! Copy record 1 into record 2
253
254         IF ( ( kstp /= nitend )         .AND. &
255            & ( kstp - nit000 + 1 /= 0 ) .AND. &
256            & ( kdir == -1 ) ) THEN
257
258            stpr2           = stpr1
259
260            empr2   (:,:)   = empr1   (:,:)
261            empsr2  (:,:)   = empsr1  (:,:)
262
263            unr2    (:,:,:) = unr1    (:,:,:)
264            vnr2    (:,:,:) = vnr1    (:,:,:)
265            tnr2    (:,:,:) = tnr1    (:,:,:)
266            snr2    (:,:,:) = snr1    (:,:,:)
267            avmur2  (:,:,:) = avmur1  (:,:,:)
268            avmvr2  (:,:,:) = avmvr1  (:,:,:)
269            avtr2   (:,:,:) = avtr1   (:,:,:)
270#if defined key_ldfslp
271            uslpr2  (:,:,:) = uslpr1  (:,:,:)
272            vslpr2  (:,:,:) = vslpr1  (:,:,:)
273            wslpir2 (:,:,:) = wslpir1 (:,:,:)
274            wslpjr2 (:,:,:) = wslpjr1 (:,:,:)
275#endif
276#if defined key_zdfddm
277            avsr2   (:,:,:) = avsr1   (:,:,:)
278#endif
279            tar2    (:,:,:) = tar1    (:,:,:)
280            sar2    (:,:,:) = sar1    (:,:,:)
281            tbr2    (:,:,:) = tbr1    (:,:,:)
282            sbr2    (:,:,:) = sbr1    (:,:,:)
283#if defined key_tradmp
284            hmlp1   (:,:)   = hmlp2   (:,:)
285#endif
286#if defined key_traldf_eiv 
287#if defined key_traldf_c3d
288            aeiur2  (:,:,:) = aeiur1  (:,:,:)
289            aeivr2  (:,:,:) = aeivr1  (:,:.:)
290            aeiwr2  (:,:,:) = aeiwr1  (:,:.:)
291#elif defined key_traldf_c2d
292            aeiur2  (:,:)   = aeiur1  (:,:)
293            aeivr2  (:,:)   = aeivr1  (:,:)
294            aeiwr2  (:,:)   = aeiwr1  (:,:)
295#elif defined key_traldf_c1d
296            aeiur2  (:)     = aeiur1  (:)
297            aeivr2  (:)     = aeivr1  (:)
298            aeiwr2  (:)     = aeiwr1  (:)
299#else
300            aeiur2          = aeiur1     
301            aeivr2          = aeivr1     
302            aeiwr2          = aeiwr1     
303#endif
304#endif
305
306            istpr1 = INT( stpr1 )
307
308            IF(lwp) WRITE(numout,*) &
309               &                 '    Trajectory record copy time step = ', istpr1
310
311         ENDIF
312! added
313         IF ( ( kstp - nit000 + 1 /= 0 ) .AND. ( kdir == -1 ) ) THEN
314            ! We update the input filename
315            WRITE(cl_asmtrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_asmtrj ), '_', (it-nittrjfrq)
316            cl_asmtrj = TRIM( cl_asmtrj )
317            IF(lwp) THEN
318               WRITE(numout,*)
319               WRITE(numout,*)'Reading non-linear fields from : ',TRIM(cl_asmtrj)
320               WRITE(numout,*)
321            ENDIF
322         ENDIF
323! end added
324         ! Read record 1
325
326         IF ( ( kstp - nit000 + 1 == 0 ) .AND.( kdir == 1           ) .OR. &
327            & ( kstp - nit000 + 1 /= 0 ) .AND.( kdir == -1          ) ) THEN
328
329            IF ( kdir == -1 ) inrcm = inrcm - 1
330!added
331!            inrc = inrcm
332            ! temporary fix: currently, only one field by step time
333            inrc = 1
334            stpr1 = (inrcm - 1) * nittrjfrq
335!            stpr1 = (inrc - 1) * nittrjfrq
336!end added
337
338            ! bug fixed to read several time the initial data
339            IF ( ( kstp - nit000 + 1 == 0 ) .AND. ( kdir == 1 ) ) THEN
340               ! Define the input file
341               WRITE(cl_asmtrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_asmtrj ), '_', it
342
343               cl_asmtrj = TRIM( cl_asmtrj )
344
345               IF(lwp) THEN
346                  WRITE(numout,*)
347                  WRITE(numout,*)'Reading non-linear fields from : ',TRIM(cl_asmtrj)
348                  WRITE(numout,*)
349               ENDIF
350            END IF
351            IF ( inumtrj1 /= -1 )   CALL iom_open( cl_asmtrj, inumtrj1 )
352
353            CALL iom_get( inumtrj1, jpdom_data, 'emp'   , empr1   , inrc )
354            CALL iom_get( inumtrj1, jpdom_data, 'emps'  , empsr1  , inrc )
355            CALL iom_get( inumtrj1, jpdom_data, 'un'    , unr1    , inrc )
356            CALL iom_get( inumtrj1, jpdom_data, 'vn'    , vnr1    , inrc )
357            CALL iom_get( inumtrj1, jpdom_data, 'tn'    , tnr1    , inrc )
358            CALL iom_get( inumtrj1, jpdom_data, 'sn'    , snr1    , inrc )
359            CALL iom_get( inumtrj1, jpdom_data, 'avmu'  , avmur1  , inrc )
360            CALL iom_get( inumtrj1, jpdom_data, 'avmv'  , avmvr1  , inrc )
361            CALL iom_get( inumtrj1, jpdom_data, 'avt'   , avtr1   , inrc )
362#if defined key_ldfslp
363            CALL iom_get( inumtrj1, jpdom_data, 'uslp'  , uslpr1  , inrc )
364            CALL iom_get( inumtrj1, jpdom_data, 'vslp'  , vslpr1  , inrc )
365            CALL iom_get( inumtrj1, jpdom_data, 'wslpi' , wslpir1 , inrc )
366            CALL iom_get( inumtrj1, jpdom_data, 'wslpj' , wslpjr1 , inrc )
367#endif
368#if defined key_zdfddm
369            CALL iom_get( inumtrj1, jpdom_data, 'avs'   , avsr1   , inrc )
370#endif
371            CALL iom_get( inumtrj1, jpdom_data, 'ta'    , tar1    , inrc )
372            CALL iom_get( inumtrj1, jpdom_data, 'sa'    , sar1    , inrc )
373            CALL iom_get( inumtrj1, jpdom_data, 'tb'    , tbr1    , inrc )
374            CALL iom_get( inumtrj1, jpdom_data, 'sb'    , sbr1    , inrc )
375#if defined key_tradmp
376            CALL iom_get( inumtrj1, jpdom_data, 'hmlp'  , hmlp1   , inrc )
377#endif
378#if defined key_traldf_eiv
379            CALL iom_get( inumtrj1, jpdom_data, 'aeiu'  , aeiur1  , inrc )
380            CALL iom_get( inumtrj1, jpdom_data, 'aeiv'  , aeivr1  , inrc )
381            CALL iom_get( inumtrj1, jpdom_data, 'aeiw'  , aeiwr1  , inrc )
382#endif
383            CALL iom_close( inumtrj1 )
384
385            istpr1 = INT( stpr1 )
386            IF(lwp)WRITE(numout,*) '   trajectory read time step = ', istpr1,&
387               &                   '  record = ', inrc
388
389         ENDIF
390
391
392         ! Copy record 2 into record 1
393
394         IF ( ( kstp - nit000 + 1 /= 0 ) .AND. &
395            & ( kstp /= nitend         ) .AND. &
396            & ( kdir == 1              ) ) THEN
397
398            stpr1           = stpr2
399            empr1   (:,:)   = empr2   (:,:)
400            empsr1  (:,:)   = empsr2  (:,:)
401            unr1    (:,:,:) = unr2    (:,:,:)
402            vnr1    (:,:,:) = vnr2    (:,:,:)
403            tnr1    (:,:,:) = tnr2    (:,:,:)
404            snr1    (:,:,:) = snr2    (:,:,:)
405            avmur1  (:,:,:) = avmur2  (:,:,:)
406            avmvr1  (:,:,:) = avmvr2  (:,:,:)
407            avtr1   (:,:,:) = avtr2   (:,:,:)
408#if defined key_ldfslp
409            uslpr1  (:,:,:) = uslpr2  (:,:,:)
410            vslpr1  (:,:,:) = vslpr2  (:,:,:)
411            wslpir1 (:,:,:) = wslpir2 (:,:,:)
412            wslpjr1 (:,:,:) = wslpjr2 (:,:,:)
413#endif
414#if defined key_zdfddm
415            avsr1   (:,:,:) = avsr2   (:,:,:)
416#endif
417            tar1    (:,:,:) = tar2    (:,:,:)
418            sar1    (:,:,:) = sar2    (:,:,:)
419            tbr1    (:,:,:) = tbr2    (:,:,:)
420            sbr1    (:,:,:) = sbr2    (:,:,:)
421#if defined key_tradmp
422            hmlp1   (:,:)   = hmlp2   (:,:)
423#endif
424#if defined key_traldf_eiv 
425#if defined key_traldf_c3d
426            aeiur1  (:,:,:) = aeiur2  (:,:,:)
427            aeivr1  (:,:,:) = aeivr2  (:,:.:)
428            aeiwr1  (:,:,:) = aeiwr2  (:,:.:)
429#elif defined key_traldf_c2d
430            aeiur1  (:,:)   = aeiur2  (:,:)
431            aeivr1  (:,:)   = aeivr2  (:,:)
432            aeiwr1  (:,:)   = aeiwr2  (:,:)
433#elif defined key_traldf_c1d
434            aeiur1  (:)     = aeiur2  (:)
435            aeivr1  (:)     = aeivr2  (:)
436            aeiwr1  (:)     = aeiwr2  (:)
437#else
438            aeiur1          = aeiur2     
439            aeivr1          = aeivr2     
440            aeiwr1          = aeiwr2     
441#endif
442#endif
443
444            istpr1 = INT( stpr1 )
445            IF(lwp) WRITE(numout,*) &
446               &                 '   Trajectory record copy time step = ', istpr1
447
448         ENDIF
449
450         ! Read record 2
451
452!!         IF ( ( kstp /= nitend ) .AND. ( kdir == 1  ) .OR. &
453!!            & ( kstp == nitend ) .AND. ( kdir == -1 ) ) THEN   
454! change
455         IF ( ( ( kstp /= nitend ) .AND. ( kdir == 1  )) .OR. &
456            &   ( kstp == nitend ) .AND.(  kdir == -1   ) ) THEN
457! end change
458!added
459!            ! Need to open next saved file when kstp = initial step   
460!            IF  ( kstp - nit000 + 1 == 0 ) THEN     
461            ! Need to open next saved file when kstp = initial step   
462! change     
463!            IF ( ( kstp /= nitend ) .AND. ( kdir == 1 ) ) THEN
464! end change
465! end added
466               ! Define the input file
467               IF  (  kdir == -1   ) THEN
468                   WRITE(cl_asmtrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_asmtrj ), '_', (it)
469               ELSE     
470                  WRITE(cl_asmtrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_asmtrj ), '_', (it+nittrjfrq)
471               ENDIF
472               cl_asmtrj = TRIM( cl_asmtrj )
473
474               IF(lwp) THEN       
475                  WRITE(numout,*)
476                  WRITE(numout,*)'Reading non-linear fields from : ',TRIM(cl_asmtrj)
477                  WRITE(numout,*)       
478               ENDIF
479
480               CALL iom_open( cl_asmtrj, inumtrj2 ) 
481! change
482!            END IF
483!end change
484
485            inrcp = inrcm + 1
486            !            inrc  = inrcp
487!added
488            inrc = 1  ! temporary  fix
489!end added
490            stpr2 = (inrcp - 1) * nittrjfrq 
491            CALL iom_get( inumtrj2, jpdom_data, 'emp'   , empr2   , inrc )
492            CALL iom_get( inumtrj2, jpdom_data, 'emps'  , empsr2  , inrc )
493            CALL iom_get( inumtrj2, jpdom_data, 'un'    , unr2    , inrc )
494            CALL iom_get( inumtrj2, jpdom_data, 'vn'    , vnr2    , inrc )
495            CALL iom_get( inumtrj2, jpdom_data, 'tn'    , tnr2    , inrc )
496            CALL iom_get( inumtrj2, jpdom_data, 'sn'    , snr2    , inrc )
497            CALL iom_get( inumtrj2, jpdom_data, 'avmu'  , avmur2  , inrc )
498            CALL iom_get( inumtrj2, jpdom_data, 'avmv'  , avmvr2  , inrc )
499            CALL iom_get( inumtrj2, jpdom_data, 'avt'   , avtr2   , inrc )
500#if defined key_ldfslp
501            CALL iom_get( inumtrj2, jpdom_data, 'uslp'  , uslpr2  , inrc )
502            CALL iom_get( inumtrj2, jpdom_data, 'vslp'  , vslpr2  , inrc )
503            CALL iom_get( inumtrj2, jpdom_data, 'wslpi' , wslpir2 , inrc )
504            CALL iom_get( inumtrj2, jpdom_data, 'wslpj' , wslpjr2 , inrc )
505#endif
506#if defined key_zdfddm
507            CALL iom_get( inumtrj2, jpdom_data, 'avs'   , avsr2   , inrc )
508#endif
509            CALL iom_get( inumtrj2, jpdom_data, 'ta'    , tar2    , inrc )
510            CALL iom_get( inumtrj2, jpdom_data, 'sa'    , sar2    , inrc )
511            CALL iom_get( inumtrj2, jpdom_data, 'tb'    , tbr2    , inrc )
512            CALL iom_get( inumtrj2, jpdom_data, 'sb'    , sbr2    , inrc )
513#if defined key_tradmp
514            CALL iom_get( inumtrj2, jpdom_data, 'hmlp'  , hmlp2   , inrc )
515#endif
516#if defined key_traldf_eiv
517            CALL iom_get( inumtrj2, jpdom_data, 'aeiu'  , aeiur2  , inrc )
518            CALL iom_get( inumtrj2, jpdom_data, 'aeiv'  , aeivr2  , inrc )
519            CALL iom_get( inumtrj2, jpdom_data, 'aeiw'  , aeiwr2  , inrc )
520#endif
521            CALL iom_close( inumtrj2 )
522
523            istpr2 = INT( stpr2 )
524            IF(lwp)WRITE(numout,*) '   trajectory read2 time step = ', istpr2,&
525               &                   '  record = ', inrc
526         ENDIF
527
528      ENDIF
529
530      ! Linear interpolate to the current step
531
532      IF(lwp)WRITE(numout,*) '   linear interpolate to current', &
533         &                   ' time step = ', kstp
534
535      ! Interpolation coefficients
536
537      zstp = kstp - nit000 + 1
538      zden   = 1.0 / ( stpr2 - stpr1 )
539
540      zwtr1  = ( stpr2 - zstp      ) * zden
541      zwtr2  = ( zstp  - stpr1     ) * zden
542
543IF(lwp)WRITE(numout,*) '   linear interpolate coeff.', &
544         &                   '  = ', zwtr1, zwtr2
545
546      emp(:,:)      = zwtr1 * empr1   (:,:)   + zwtr2 * empr2   (:,:)
547      emps(:,:)     = zwtr1 * empsr1  (:,:)   + zwtr2 * empsr2  (:,:)
548      un(:,:,:)     = zwtr1 * unr1    (:,:,:) + zwtr2 * unr2    (:,:,:)
549      vn(:,:,:)     = zwtr1 * vnr1    (:,:,:) + zwtr2 * vnr2    (:,:,:)
550      tn(:,:,:)     = zwtr1 * tnr1    (:,:,:) + zwtr2 * tnr2    (:,:,:)
551      sn(:,:,:)     = zwtr1 * snr1    (:,:,:) + zwtr2 * snr2    (:,:,:)
552      avmu(:,:,:)   = zwtr1 * avmur1  (:,:,:) + zwtr2 * avmur2  (:,:,:)
553      avmv(:,:,:)   = zwtr1 * avmvr1  (:,:,:) + zwtr2 * avmvr2  (:,:,:)
554      avt(:,:,:)    = zwtr1 * avtr1   (:,:,:) + zwtr2 * avtr2   (:,:,:)
555#if defined key_ldfslp
556      uslp(:,:,:)   = zwtr1 * uslpr1  (:,:,:) + zwtr2 * uslpr2  (:,:,:)
557      vslp(:,:,:)   = zwtr1 * vslpr1  (:,:,:) + zwtr2 * vslpr2  (:,:,:)
558      wslpi(:,:,:)  = zwtr1 * wslpir1 (:,:,:) + zwtr2 * wslpir2 (:,:,:)
559      wslpj(:,:,:)  = zwtr1 * wslpjr1 (:,:,:) + zwtr2 * wslpjr2 (:,:,:)
560#endif
561#if defined key_zdfddm
562      avs(:,:,:)    = zwtr1 * avsr1   (:,:,:) + zwtr2 * avsr2   (:,:,:)
563#endif
564      ta(:,:,:)     = zwtr1 * tar1    (:,:,:) + zwtr2 * tar2    (:,:,:)
565      sa(:,:,:)     = zwtr1 * sar1    (:,:,:) + zwtr2 * sar2    (:,:,:)
566      tb(:,:,:)     = zwtr1 * tbr1    (:,:,:) + zwtr2 * tbr2    (:,:,:)
567      sb(:,:,:)     = zwtr1 * sbr1    (:,:,:) + zwtr2 * sbr2    (:,:,:)
568#if defined key_tradmp
569      hmlp(:,:)     = zwtr1 * hmlp1(:,:)    + zwtr2 * hmlp2(:,:)
570#endif
571#if defined key_traldf_eiv 
572#if defined key_traldf_c3d
573      aeiu(:,:,:)   = zwtr1 * aeiur1  (:,:,:) + zwtr2 * aeiur2  (:,:,:)
574      aeiv(:,:,:)   = zwtr1 * aeivr1  (:,:,:) + zwtr2 * aeivr2  (:,:.:)
575      aeiw(:,:,:)   = zwtr1 * aeiwr1  (:,:,:) + zwtr2 * aeiwr2  (:,:.:)
576#elif defined key_traldf_c2d
577      aeiu(:,:)     = zwtr1 * aeiur1  (:,:)   + zwtr2 * aeiur2  (:,:)
578      aeiv(:,:)     = zwtr1 * aeivr1  (:,:)   + zwtr2 * aeivr2  (:,:)
579      aeiw(:,:)     = zwtr1 * aeiwr1  (:,:)   + zwtr2 * aeiwr2  (:,:)
580#elif defined key_traldf_c1d
581      aeiu(:)       = zwtr1 * aeiur1  (:)     + zwtr2 * aeiur2  (:)
582      aeiv(:)       = zwtr1 * aeivr1  (:)     + zwtr2 * aeivr2  (:)
583      aeiw(:)       = zwtr1 * aeiwr1  (:)     + zwtr2 * aeiwr2  (:)
584#else
585      aeiu          = zwtr1 * aeiur1          + zwtr2 * aeiur2     
586      aeiv          = zwtr1 * aeivr1          + zwtr2 * aeivr2     
587      aeiw          = zwtr1 * aeiwr1          + zwtr2 * aeiwr2     
588#endif
589#endif
590
591      CALL div_cur(kstp)
592      CALL wzv(kstp)
593
594   END SUBROUTINE trj_rea
595
596
597   SUBROUTINE trj_wri_spl(filename)
598      !!-----------------------------------------------------------------------
599      !!
600      !!                  ***  ROUTINE trj_wri_spl ***
601      !!
602      !! ** Purpose : Write SimPLe data to file the model state trajectory
603      !!
604      !! ** Method  :
605      !!
606      !! ** Action  :
607      !!
608      !! History :
609      !!        ! 09-07 (F. Vigilant)
610      !!-----------------------------------------------------------------------
611      !! *Module udes
612      USE iom 
613      !! * Arguments
614      !! * Local declarations
615      INTEGER :: &
616         & inum, &                  ! File unit number
617         & fd                       ! field number
618      CHARACTER (LEN=50) :: &
619         & filename     
620
621      fd=1
622      WRITE(filename, FMT='(A,A)' ) TRIM( filename ), '.nc'
623      filename = TRIM( filename )
624      CALL iom_open( filename, inum, ldwrt = .TRUE., kiolib = jprstlib)
625
626      ! Output trajectory fields
627      CALL iom_rstput( fd, fd, inum, 'un'   , un   )
628      CALL iom_rstput( fd, fd, inum, 'vn'   , vn   )
629      CALL iom_rstput( fd, fd, inum, 'tn'   , tn   )
630      CALL iom_rstput( fd, fd, inum, 'sn'   , sn   )
631      CALL iom_rstput( fd, fd, inum, 'sshn' , sshn )
632      CALL iom_rstput( fd, fd, inum, 'wn'   , wn   )
633      CALL iom_rstput( fd, fd, inum, 'tb'   , tb   )
634      CALL iom_rstput( fd, fd, inum, 'sb'   , sb   )
635      CALL iom_rstput( fd, fd, inum, 'ua'   , ua   )
636      CALL iom_rstput( fd, fd, inum, 'va'   , va   )
637      CALL iom_rstput( fd, fd, inum, 'ta'   , ta   )
638      CALL iom_rstput( fd, fd, inum, 'sa'   , sa   )
639      CALL iom_rstput( fd, fd, inum, 'sshb' , sshb )
640      CALL iom_rstput( fd, fd, inum, 'rhd'  , rhd  )
641      CALL iom_rstput( fd, fd, inum, 'rhop' , rhop )
642      CALL iom_rstput( fd, fd, inum, 'gtu'  , gtu  )
643      CALL iom_rstput( fd, fd, inum, 'gsu'  , gsu  )
644      CALL iom_rstput( fd, fd, inum, 'gru'  , gru  )
645      CALL iom_rstput( fd, fd, inum, 'gtv'  , gtv  )
646      CALL iom_rstput( fd, fd, inum, 'gsv'  , gsv  )
647      CALL iom_rstput( fd, fd, inum, 'grv'  , grv  )
648      CALL iom_rstput( fd, fd, inum, 'rn2'  , rn2  )
649
650      CALL iom_close( inum )
651
652   END SUBROUTINE trj_wri_spl
653
654   SUBROUTINE trj_rd_spl(filename)
655      !!-----------------------------------------------------------------------
656      !!
657      !!                  ***  ROUTINE asm_trj__wop_rd ***
658      !!
659      !! ** Purpose : Read SimPLe data from file the model state trajectory
660      !!
661      !! ** Method  :
662      !!
663      !! ** Action  :
664      !!
665      !! History :
666      !!        ! 09-07 (F. Vigilant)
667      !!-----------------------------------------------------------------------
668      !! *Module udes
669      USE iom                 ! I/O module
670      !! * Arguments
671      !! * Local declarations
672      INTEGER :: &
673         & inum, &                  ! File unit number
674         & fd                       ! field number
675      CHARACTER (LEN=50) :: &
676         & filename
677       
678      fd=1
679      WRITE(filename, FMT='(A,A)' ) TRIM( filename ), '.nc'
680      filename = TRIM( filename )
681      CALL iom_open( filename, inum)
682
683      ! Output trajectory fields
684      CALL iom_get( inum, jpdom_autoglo, 'un'   , un,   fd )
685      CALL iom_get( inum, jpdom_autoglo, 'vn'   , vn,   fd )
686      CALL iom_get( inum, jpdom_autoglo, 'tn'   , tn,   fd )
687      CALL iom_get( inum, jpdom_autoglo, 'sn'   , sn,   fd )
688      CALL iom_get( inum, jpdom_autoglo, 'sshn' , sshn, fd )
689      CALL iom_get( inum, jpdom_autoglo, 'wn'   , wn,   fd )
690      CALL iom_get( inum, jpdom_autoglo, 'tb'   , tb,   fd )
691      CALL iom_get( inum, jpdom_autoglo, 'sb'   , sb,   fd )
692      CALL iom_get( inum, jpdom_autoglo, 'ua'   , ua,   fd )
693      CALL iom_get( inum, jpdom_autoglo, 'va'   , va,   fd )
694      CALL iom_get( inum, jpdom_autoglo, 'ta'   , ta,   fd )
695      CALL iom_get( inum, jpdom_autoglo, 'sa'   , sa,   fd )
696      CALL iom_get( inum, jpdom_autoglo, 'sshb' , sshb, fd )
697      CALL iom_get( inum, jpdom_autoglo, 'rhd'  , rhd,  fd )
698      CALL iom_get( inum, jpdom_autoglo, 'rhop' , rhop, fd )
699      CALL iom_get( inum, jpdom_autoglo, 'gtu'  , gtu,  fd )
700      CALL iom_get( inum, jpdom_autoglo, 'gsu'  , gsu,  fd )
701      CALL iom_get( inum, jpdom_autoglo, 'gru'  , gru,  fd )
702      CALL iom_get( inum, jpdom_autoglo, 'gtv'  , gtv,  fd )
703      CALL iom_get( inum, jpdom_autoglo, 'gsv'  , gsv,  fd )
704      CALL iom_get( inum, jpdom_autoglo, 'grv'  , grv,  fd )
705      CALL iom_get( inum, jpdom_autoglo, 'rn2'  , rn2,  fd )
706
707      CALL iom_close( inum )
708
709   END SUBROUTINE trj_rd_spl
710
711#endif
712END MODULE trj_tam
Note: See TracBrowser for help on using the repository browser.