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.
dtasst.F90 in trunk/NEMO/OPA_SRC/DTA – NEMO

source: trunk/NEMO/OPA_SRC/DTA/dtasst.F90 @ 84

Last change on this file since 84 was 84, checked in by opalod, 20 years ago

CT : UPDATE057 : # General syntax, alignement, comments corrections

# l_ctl alone replace the set (l_ctl .AND. lwp)
# Add of diagnostics which are activated when using l_ctl logical

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.5 KB
Line 
1MODULE dtasst
2   !!======================================================================
3   !!                       ***  MODULE  dtasst  ***
4   !! Data : Sea Surface Temperature (SST)
5   
6   !!      BUG initialisation  nyearsst !!!!!!bug
7   
8   !!======================================================================
9   
10   !!----------------------------------------------------------------------
11   !!   dta_sst      : Reynolds sst data
12   !!----------------------------------------------------------------------
13   !! * Modules used
14   USE oce             ! ocean dynamics and tracers
15   USE dom_oce         ! ocean space and time domain
16   USE in_out_manager  ! I/O manager
17   USE ocfzpt          ! ???
18   USE daymod          ! calendar
19
20   IMPLICIT NONE
21   PRIVATE
22
23   !! * Shared routine
24   PUBLIC dta_sst
25
26   !! * Shared module variables
27#if defined key_dtasst
28   LOGICAL , PUBLIC, PARAMETER ::   lk_dtasst = .TRUE.   !: sst data flag
29#else
30   LOGICAL , PUBLIC, PARAMETER ::   lk_dtasst = .FALSE.  !: sst data flag
31#endif
32   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   &  !:
33      sst             !: surface temperature
34   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2) ::   &  !:
35      rclice          !: climatological ice index (0/1) (2 months)
36   !!----------------------------------------------------------------------
37   !!   OPA 9.0 , IPSL-LODYC  (2003)
38   !!----------------------------------------------------------------------
39
40CONTAINS
41
42#if defined key_dtasst
43   !!----------------------------------------------------------------------
44   !!   'key_dtasst'                                               SST data
45   !!----------------------------------------------------------------------
46
47   SUBROUTINE dta_sst( kt )
48      !!---------------------------------------------------------------------
49      !!                  ***  ROUTINE dta_sst  ***
50      !!                   
51      !! ** Purpose :   Read Reynolds weekly mean sea surface temperature
52      !!      data and update it at each time step.
53      !!
54      !! ** Method  : - Read a specific REYNOLDS daily sst in Celcius.
55      !!              -  Compute a climatological ice cover rclice (0 or 1)
56      !!
57      !! ** Action  : - sst (Celcius)
58      !!              - rclice, ice/ocean mask (0 or 1)
59      !!
60      !! History :
61      !!        !  90-03  (O. Marti and Ph Dandin)  Original code
62      !!        !  92-07  (M. Imbard)
63      !!        !  96-11  (E. Guilyardi)  Daily AGCM input files
64      !!        !  00-04  (M. Imbard)  NetCDF FORMAT
65      !!        !  00-10  (J.-P. Boulanger)  passage ORCA a TDH
66      !!        !  01-10  (A. Lazar)  Reynolds default
67      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
68      !!        !  02-11  (C. Levy)  MPP/MPI NetCDF read
69      !!----------------------------------------------------------------------
70      !! * Modules used
71      USE ioipsl
72     
73      !! * Arguments
74      INTEGER ::   kt
75
76      !! * Local save
77      INTEGER, SAVE ::   &
78      ndaysst,        &  ! new day for Reynolds sst
79      nyearsst           ! new year for Reynolds sst
80
81      !! * Local declarations
82      INTEGER ::   ji, jj
83      INTEGER ::   iprint
84      INTEGER ::   iy, iday, idy
85      INTEGER ::   istep(366)
86      INTEGER ::   ipi, ipj, ipk
87
88      REAL(wp) ::   zdate0, zdt, ztgel
89      REAL(wp) ::   zlon(jpi,jpj), zlat(jpi,jpj), zlev(jpk)
90      CHARACTER (len=45) ::   &
91         clname = "sst_1d.nc"      ! filename for daily SST
92      !!----------------------------------------------------------------------
93
94      IF( kt == nit000 ) THEN
95         IF(lwp) WRITE(numout,*)
96         IF(lwp) WRITE(numout,*) 'dta_sst : DAILY sea surface temperature data'
97         IF(lwp) WRITE(numout,*) '~~~~~~~   read in file: ', clname
98         sst(:,:) = 0.e0   ! required for extra halos in mpp
99      ENDIF
100
101
102      ! 0. initialization
103      ! -----------------
104
105      ipi = jpiglo
106      ipj = jpjglo
107      ipk = jpk
108
109      IF( nleapy == 0 ) THEN
110         idy=365
111      ELSEIF( nleapy == 1 ) THEN
112         IF( MOD( nyear, 4 ) == 0 ) THEN
113            idy=366
114         ELSE
115            idy=365
116         ENDIF
117      ELSEIF( nleapy == 30 ) THEN
118         IF(lwp) WRITE(numout,*) 'dtasst : nleapy = 30 is not compatible'
119         IF(lwp) WRITE(numout,*) '         with existing files'
120         IF(lwp) WRITE(numout,*) 'WE STOP'
121         STOP 1234
122      ENDIF
123     
124     
125      ! 2. Open files if nyearsst
126      ! -------------------------
127
128      IF( nyearsst /= nyear ) THEN
129         nyearsst = nyear
130         iprint   = 1
131         
132         !  2.1 Define file name and record
133         
134         !   Close/open file if new year
135         
136         IF( nyearsst /= 0 )   CALL flinclo(numsst)
137         iy = nyear
138         IF(lwp) WRITE (numout,*) iy
139         IF(lwp) WRITE (numout,*) 'open sst file = ', clname
140         CALL FLUSH(numout)
141         
142         CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, .FALSE., ipi, ipj   &
143            , ipk, zlon, zlat, zlev, idy, istep, zdate0, zdt, numsst )
144         
145         IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN
146            IF(lwp) WRITE(numout,*)
147            IF(lwp) WRITE(numout,*) 'problem with dimensions'
148            IF(lwp) WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta
149            IF(lwp) WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta
150            nstop = nstop + 1
151         ENDIF
152         IF(lwp) WRITE(numout,*) idy, istep, zdate0, zdt
153      ELSE
154         iprint = 0
155      ENDIF
156
157
158      ! 3. Read SST if new day
159      ! -------------------------
160
161      ! Read daily SST
162
163      IF( ndaysst /= nday ) THEN
164         ndaysst = nday
165         iday = nday_year
166         
167         CALL flinget( numsst, 'sst', jpidta, jpjdta, 1, idy, iday,   &
168            iday, mig(1), nlci, mjg(1), nlcj, sst(1:nlci,1:nlcj) )
169         
170         IF ( kt == nit000 .AND. lwp ) THEN
171            WRITE(numout,*) ' '
172            WRITE(numout,*) ' read daily sea surface temperature ok'
173            WRITE(numout,*) ' '
174            WRITE(numout,*) ' Surface temp day: ', ndastp
175            CALL prihre(sst(1,1),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout)
176         ENDIF
177         
178      ENDIF
179     
180      ! 2. At every time step compute temperature data
181      ! ----------------------------------------------
182     
183      DO jj = 1, jpj
184         DO ji = 1, jpi
185            ztgel = fzptn(ji,jj)
186            rclice(ji,jj,1) = tmask(ji,jj,1)
187            IF( sst(ji,jj) >= ztgel )   rclice(ji,jj,1) = 0.e0
188            rclice(ji,jj,2) = rclice(ji,jj,1)
189         END DO
190      END DO
191      IF( kt == nit000 .AND. lwp ) THEN
192         WRITE(numout,*)
193         WRITE(numout,*) 'Computed Ice cover rclice'
194         WRITE(numout,*)
195         WRITE(numout,*) 'Ice cover : '
196         CALL prihre( rclice(1,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout )
197      ENDIF
198     
199      ! Close the file
200      ! --------------
201     
202      IF( kt == nitend )   CALL flinclo(numsst)
203      CALL FLUSH(numout)
204     
205
206   END SUBROUTINE dta_sst
207
208#else
209   !!----------------------------------------------------------------------
210   !!   Default option :                                        NO SST data
211   !!----------------------------------------------------------------------
212
213   SUBROUTINE dta_sst( kt )
214      !!---------------------------------------------------------------------
215      !!                  ***  ROUTINE dta_sst  ***
216      !!                   
217      !! ** Purpose :   sea surface temperature data and update it
218      !!     at each time step.   ???
219      !!
220      !! ** Method  : - sst   = tn
221      !!              - rclice = 1. IF tn =< ztgel
222      !!
223      !! History :
224      !!        !  91-03  ()  Original code
225      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
226      !!----------------------------------------------------------------------
227      !! * Arguments
228      INTEGER, INTENT( in ) ::   kt      ! ocean timestep
229     
230      !! * Local declarations
231      INTEGER :: ji, jj
232      !!---------------------------------------------------------------------
233     
234      IF( kt == nit000 ) THEN
235         IF(lwp) WRITE(numout,*)
236         IF(lwp) WRITE(numout,*) 'dta_sst : No SST data'
237         IF(lwp) WRITE(numout,*) '~~~~~~~'
238      ENDIF
239     
240      ! 1. Update at each time step
241      ! ---------------------------
242
243      sst   (:,:)   = tn   (:,:,1)
244      rclice(:,:,1) = tmask(:,:,1)
245      DO jj = 1, jpj
246         DO ji = 1, jpi
247            IF( tn(ji,jj,1) >= fzptn(ji,jj) ) rclice(ji,jj,1) = 0.e0
248         END DO
249      END DO
250      rclice(:,:,2) = rclice(:,:,1)
251     
252   END SUBROUTINE dta_sst
253#endif
254
255   !!======================================================================
256END MODULE dtasst
Note: See TracBrowser for help on using the repository browser.