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.
tau_forced_monthly.h90 in trunk/NEMO/OPA_SRC/SBC – NEMO

source: trunk/NEMO/OPA_SRC/SBC/tau_forced_monthly.h90 @ 222

Last change on this file since 222 was 222, checked in by opalod, 19 years ago

CT : BUGFIX159 : initialize ipk=jpk to avoid error when running on IBM and with IOIPSL-2-0 tag

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.8 KB
Line 
1   !!----------------------------------------------------------------------
2   !!                ***  tau_forced_monthly.h90  ***
3   !!----------------------------------------------------------------------
4
5   !!----------------------------------------------------------------------
6   !!   tau     : update the surface wind stress - monthly fields in NetCDF
7   !!             file.
8   !!----------------------------------------------------------------------
9   !! * local modules variables
10   INTEGER ::   &
11      numtau,   &  ! logical unit for the i-component of the wind data
12      numtav,   &  ! logical unit for the j-component of the wind data
13      ntau1, ntau2  ! index of the first and second record used
14
15   CHARACTER (len=34) ::   &      !!! * monthly climatology/interanual fields
16      cl_taux = 'taux_1m.nc',  & ! generic name of the i-component monthly NetCDF file
17      cl_tauy = 'tauy_1m.nc'     ! generic name of the j-component monthly NetCDF file
18
19   REAL(wp), DIMENSION(jpi,jpj,2) ::   &
20      taux_dta,    &  ! i- and j-components of the surface stress (Pascal)
21      tauy_dta        ! at 2 consecutive months in the (i,j) referential
22   !!----------------------------------------------------------------------
23   !!   OPA 9.0 , LODYC-IPSL  (2003)
24   !!----------------------------------------------------------------------
25
26CONTAINS
27
28   SUBROUTINE tau( kt )
29      !!---------------------------------------------------------------------
30      !!                  ***  ROUTINE tau  ***
31      !!             
32      !! ** Purpose :   provide to the ocean the stress at each time step
33      !!
34      !! ** Method  : - Read the 2 monthly surface stress components in NetCDF
35      !!      file at 2 consecutive time-steps
36      !!        They are given in the (i,j) referential
37      !!        The i-component is given at U-point (INTERP package)
38      !!        The j-component is given at V-point (INTERP package)
39      !!              - a linear time-interpolation is performed to provide the
40      !!      stress at the kt time-step.
41      !!
42      !!    CAUTION: never mask the surface stress field !
43      !!
44      !! ** Action :
45      !!        update at each time-step the two components of the surface
46      !!      stress in both (i,j) and geographical referencial
47      !!
48      !! History :
49      !!   4.0  !  91-03  (G. Madec)  Original code
50      !!   6.0  !  92-07  (M. Imbard)
51      !!   8.1  !  00-08  (D. Ludicone) adapted to ERS-NCEP
52      !!   8.5  !  02-11  (G. Madec)  F90: Free form and module
53      !!        !                     daily/monthly, forced/coupled form
54      !!----------------------------------------------------------------------
55      !! * Modules used
56      USE ioipsl       ! NetCDF library
57      !! * Arguments
58      INTEGER, INTENT( in  ) ::   kt   ! ocean time step
59
60      !! * Local declarations
61      INTEGER, PARAMETER ::   jpmonth = 12
62      INTEGER ::   &
63         imois, iman, itime,   &
64         i15,   &
65         ipi, ipj, ipk
66      INTEGER, DIMENSION(jpmonth) ::   istep
67      REAL(wp) , DIMENSION(jpi,jpj)::  &
68         zlon  , &
69         zlat
70      REAL(wp) , DIMENSION(jpk)::  &
71         zlev
72      REAL(wp) ::   &
73         zsecond,   & ! ???
74         zdate0,    & ! ???
75         zxy          ! coefficient of the linear time interpolation
76      !!---------------------------------------------------------------------
77
78      ! -------------- !
79      ! Initialization !
80      ! -------------- !
81     
82      ! iman=number of dates in data file (12 for a year of monthly values)
83      iman  = INT( raamo )
84      ipi=jpiglo
85      ipj=jpjglo
86      ipk=jpk
87
88      i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) )
89
90      imois = nmonth + i15 - 1
91      IF( imois == 0 ) imois = iman
92
93
94      ! -------------------- !
95      ! First call kt=nit000 !
96      ! -------------------- !
97
98      IF( kt == nit000 ) THEN
99         ntau1 = 0
100         IF(lwp) WRITE(numout,*)
101         IF(lwp) WRITE(numout,*) ' tau    : MONTHLY climatological wind stress (NetCDF files)'
102         IF(lwp) WRITE(numout,*) ' ~~~    '
103         
104         ! title, dimensions and tests
105         
106         CALL flinopen( cl_taux, mig(1), nlci, mjg(1), nlcj,   &   ! taux on U-grid
107                        .FALSE., ipi   , ipj, ipk   ,        &
108                        zlon , zlat  , zlev   , itime,       &
109                        istep, zdate0, zsecond, numtau )
110         
111         IF( itime /= jpmonth ) THEN
112            IF(lwp) WRITE(numout,cform_err)
113            IF(lwp) WRITE(numout,*) '   problem with time coordinates in file ', cl_taux
114            IF(lwp) WRITE(numout,*) '   itime = ', itime,' jpmonth = ',jpmonth
115            nstop = nstop + 1
116         ENDIF
117         IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN
118            IF(lwp) WRITE(numout,cform_err)
119            IF(lwp) WRITE(numout,*) '   problem with size read in file ', cl_taux
120            IF(lwp) WRITE(numout,*) '   ipi = ',ipi,' jpidta = ',jpidta
121            IF(lwp) WRITE(numout,*) '   ipj = ',ipj,' jpjdta = ',jpjdta
122            IF(lwp) WRITE(numout,*) '   ipk = ',ipk,' must be 1'
123            nstop = nstop + 1
124         ENDIF
125
126         CALL flinopen( cl_tauy, mig(1), nlci, mjg(1), nlcj,   &   ! tauy on V-grid
127                        .FALSE., ipi   , ipj, ipk   ,        &
128                        zlon , zlat  , zlev   , itime,       &
129                        istep, zdate0, zsecond, numtav )
130
131         IF( itime /= jpmonth ) THEN         
132            IF(lwp) WRITE(numout,cform_err)
133            IF(lwp) WRITE(numout,*) '   problem with time coordinates in file ', cl_tauy
134            IF(lwp) WRITE(numout,*) '   itime = ', itime,' jpmonth = ',jpmonth
135            nstop = nstop + 1
136         ENDIF
137         IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1) THEN
138            IF(lwp) WRITE(numout,cform_err)
139            IF(lwp) WRITE(numout,*) '   problem with size read in file ', cl_tauy
140            IF(lwp) WRITE(numout,*) '   ipi = ',ipi,' jpidta = ',jpidta
141            IF(lwp) WRITE(numout,*) '   ipj = ',ipj,' jpjdta = ',jpjdta
142            IF(lwp) WRITE(numout,*) '   ipk = ',ipk,' must be 1'
143            nstop = nstop + 1
144         ENDIF
145      ENDIF
146     
147      ! ----------------- !
148      ! Read monthly file !
149      ! ----------------- !
150
151      IF( kt == nit000 .OR. imois /= ntau1 ) THEN
152
153         ! Calendar computation
154         ntau1 = imois          ! index of the first record
155         ntau2 = ntau1 + 1      ! index of the last  record
156         ntau1 = MOD( ntau1, iman )
157         IF( ntau1 == 0 ) ntau1 = iman
158         ntau2 = MOD( ntau2, iman )
159         IF( ntau2 == 0 ) ntau2 = iman
160         IF(lwp) WRITE(numout,*) 'first month used ntau1 = ', ntau1
161         IF(lwp) WRITE(numout,*) 'last  month used ntau2 = ', ntau2
162
163         ! Read the corresponding 2 monthly stress data
164         ! ntau1
165         CALL flinget( numtau,'sozotaux',    &               ! i-component at U-pt
166            jpidta,jpjdta,1,jpmonth,ntau1,   &
167            ntau1,mig(1),nlci,mjg(1),nlcj,taux_dta(1:nlci,1:nlcj,1) )
168         CALL flinget( numtav,'sometauy',    &               ! j-component at V-pt
169            jpidta,jpjdta,1,jpmonth,ntau1,   &
170            ntau1,mig(1),nlci,mjg(1),nlcj,tauy_dta(1:nlci,1:nlcj,1) )
171         ! ntau2
172         CALL flinget( numtau,'sozotaux',    &               ! i-component at U-pt
173            jpidta,jpjdta,1,jpmonth,ntau2,   &
174            ntau2,mig(1),nlci,mjg(1),nlcj,taux_dta(1:nlci,1:nlcj,2) )
175         CALL flinget( numtav,'sometauy',    &               ! j-component at V-pt
176            jpidta,jpjdta,1,jpmonth,ntau2,   &
177            ntau2,mig(1),nlci,mjg(1),nlcj,tauy_dta(1:nlci,1:nlcj,2) )
178         
179         IF(lwp .AND. nitend-nit000 <= 100 ) THEN
180            WRITE(numout,*)
181            WRITE(numout,*) ' monthly stress read'
182            WRITE(numout,*)
183            WRITE(numout,*) ' month: ', ntau1, '  taux: 1 multiply by ', 1.
184            CALL prihre( taux_dta(1,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout )
185            WRITE(numout,*)
186            WRITE(numout,*) ' month: ', ntau2, '  tauy: 2 multiply by ', 1.
187            CALL prihre( tauy_dta(1,1,2), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout )
188         ENDIF
189
190         CALL FLUSH(numout)
191      ENDIF
192
193      ! ------------------------------- !
194      ! linear time interpolation at kt !
195      ! ------------------------------- !
196
197      ! zxy : coefficient for linear interpolation in time
198
199      zxy = FLOAT( nday ) / FLOAT( nobis(ntau1) ) + 0.5 - i15
200
201      taux(:,:) = (1.-zxy) * taux_dta(:,:,1) + zxy * taux_dta(:,:,2)
202      tauy(:,:) = (1.-zxy) * tauy_dta(:,:,1) + zxy * tauy_dta(:,:,2)
203
204      ! Save components
205
206      tauxg(:,:) = taux(:,:)
207      tauyg(:,:) = tauy(:,:)
208
209      CALL FLUSH(numout)
210
211      ! ------------------- !
212      ! Last call kt=nitend !
213      ! ------------------- !
214
215      ! Closing of the 2 files (required in mpp)
216      IF( kt == nitend ) THEN
217          CALL flinclo(numtau)
218          CALL flinclo(numtav)
219      ENDIF
220
221   END SUBROUTINE tau
Note: See TracBrowser for help on using the repository browser.