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.
Changeset 335 for trunk/NEMO/TOP_SRC/trcdta.F90 – NEMO

Ignore:
Timestamp:
2005-11-14T13:08:42+01:00 (19 years ago)
Author:
opalod
Message:

nemo_v1_update_023 : CE + RB + CT : new evolution of modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/trcdta.F90

    r274 r335  
    55   !!===================================================================== 
    66   !!  TOP 1.0,  LOCEAN-IPSL (2005) 
    7    !! $Header$ 
    8    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 
    97   !!---------------------------------------------------------------------- 
    108 
     
    1614   !!---------------------------------------------------------------------- 
    1715   !! * Modules used 
    18       USE oce_trc 
    19       USE trc 
    20       USE par_sms 
    21       USE lib_print 
     16   USE oce_trc 
     17   USE trc 
     18   USE par_sms 
     19   USE lib_print 
    2220 
    2321   IMPLICIT NONE 
     
    5149   !!   Default case                                            NetCDF file 
    5250   !!---------------------------------------------------------------------- 
    53  
     51    
    5452   SUBROUTINE dta_trc( kt ) 
    55 !!---------------------------------------------------------------------- 
    56 !!                   ***  ROUTINE dta_trc  *** 
    57 !! 
    58 !! ** Purpose :   Reads passive tracer data (Levitus monthly data) 
    59 !! 
    60 !! ** Method  :   Read on unit numtr the interpolated tracer concentra- 
    61 !!      tion onto the global grid. Data begin at january.  
    62 !!      The value is centered at the middle of month.  
    63 !!      In the opa model, kt=1 agree with january 1.  
    64 !!      At each time step, a linear interpolation is applied between  
    65 !!      two monthly values. 
    66 !! 
    67 !! History : 
    68 !!   8.2  !  02-04  (O. Aumont)  Original code 
    69 !!   9.0  !  04-03  (C. Ethe)     
    70 !!   9.0  !  05-03  (O. Aumont and A. El Moussaoui) F90 
    71 !!---------------------------------------------------------------------- 
    72 !! * Modules used 
     53      !!---------------------------------------------------------------------- 
     54      !!                   ***  ROUTINE dta_trc  *** 
     55      !! 
     56      !! ** Purpose :   Reads passive tracer data (Levitus monthly data) 
     57      !! 
     58      !! ** Method  :   Read on unit numtr the interpolated tracer concentra- 
     59      !!      tion onto the global grid. Data begin at january.  
     60      !!      The value is centered at the middle of month.  
     61      !!      In the opa model, kt=1 agree with january 1.  
     62      !!      At each time step, a linear interpolation is applied between  
     63      !!      two monthly values. 
     64      !! 
     65      !! History : 
     66      !!   8.2  !  02-04  (O. Aumont)  Original code 
     67      !!   9.0  !  04-03  (C. Ethe)     
     68      !!   9.0  !  05-03  (O. Aumont and A. El Moussaoui) F90 
     69      !!---------------------------------------------------------------------- 
     70      !! * Modules used 
    7371      USE ioipsl 
    7472 
    75 !! * Arguments 
     73      !! * Arguments 
    7674      !! * Arguments 
    7775      INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
    7876 
    79 !! * Local declarations 
     77      !! * Local declarations 
    8078      INTEGER :: ji, jj, jn, jl  
    8179      INTEGER, PARAMETER ::  & 
     
    9088      REAL(wp), DIMENSION (jpk) ::  zlev 
    9189      REAL(wp) :: zdate0, zxy, zl 
    92 !!---------------------------------------------------------------------- 
     90      !!---------------------------------------------------------------------- 
    9391 
    9492      DO jn = 1, jptra 
    9593 
    96         IF( lutini(jn) ) THEN  
    97  
    98           IF ( kt == nit000 ) THEN 
    99 !! 3D tracer data 
    100             IF(lwp)WRITE(numout,*) 
    101             IF(lwp)WRITE(numout,*) ' trcdta: reading tracer'  
    102             IF(lwp)WRITE(numout,*) ' data file ', jn 
    103             IF(lwp)WRITE(numout,*) 
    104             nlectr(jn) = 0 
    105           ENDIF 
    106 ! Initialization 
    107         iman = jpmois 
    108         i15  = nday/16 
    109         imois = nmonth + i15 -1 
    110         IF( imois == 0 ) imois = iman 
    111         itime = jpmois 
    112         ipi = jpiglo 
    113         ipj = jpjglo 
    114  
    115 ! First call kt=nit000 
    116 ! -------------------- 
    117  
    118         IF ( kt == nit000 .AND. nlectr(jn) == 0 ) THEN 
    119           ntrc1(jn) = 0 
    120           IF(lwp) THEN 
    121             WRITE(numout,*) 
    122             WRITE(numout,*) ' Tracer monthly fields'  
    123             WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~' 
    124             WRITE(numout,*) ' NetCDF FORMAT' 
    125             WRITE(numout,*) 
    126           ENDIF 
    127  
    128 ! open file  
    129  
    130           clname(jn) = 'LEVITUS_'//ctrcnm(jn) 
    131           CALL flinopen(TRIM(clname(jn)),mig(1),nlci,mjg(1),nlcj,    & 
    132                         .FALSE.,ipi,ipj,ipk,zlon,zlat,zlev,itime,    & 
    133                         istep,zdate0,rdt,numtr(jn)               ) 
    134  
    135 ! title, dimensions and tests 
    136           IF( itime /= jpmois ) THEN 
     94         IF( lutini(jn) ) THEN  
     95 
     96            IF ( kt == nit000 ) THEN 
     97               !! 3D tracer data 
     98               IF(lwp)WRITE(numout,*) 
     99               IF(lwp)WRITE(numout,*) ' trcdta: reading tracer'  
     100               IF(lwp)WRITE(numout,*) ' data file ', jn 
     101               IF(lwp)WRITE(numout,*) 
     102               nlectr(jn) = 0 
     103            ENDIF 
     104            ! Initialization 
     105            iman = jpmois 
     106            i15  = nday/16 
     107            imois = nmonth + i15 -1 
     108            IF( imois == 0 ) imois = iman 
     109            itime = jpmois 
     110            ipi = jpiglo 
     111            ipj = jpjglo 
     112 
     113            ! First call kt=nit000 
     114            ! -------------------- 
     115 
     116            IF ( kt == nit000 .AND. nlectr(jn) == 0 ) THEN 
     117               ntrc1(jn) = 0 
     118               IF(lwp) THEN 
     119                  WRITE(numout,*) 
     120                  WRITE(numout,*) ' Tracer monthly fields'  
     121                  WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~' 
     122                  WRITE(numout,*) ' NetCDF FORMAT' 
     123                  WRITE(numout,*) 
     124               ENDIF 
     125 
     126               ! open file  
     127 
     128               clname(jn) = 'LEVITUS_'//ctrcnm(jn) 
     129               CALL flinopen(TRIM(clname(jn)),mig(1),nlci,mjg(1),nlcj,    & 
     130                  .FALSE.,ipi,ipj,ipk,zlon,zlat,zlev,itime,    & 
     131                  istep,zdate0,rdt,numtr(jn)               ) 
     132 
     133               ! title, dimensions and tests 
     134               IF( itime /= jpmois ) THEN 
     135                  IF(lwp) THEN 
     136                     WRITE(numout,*) ' ' 
     137                     WRITE(numout,*) 'problem with time coordinates' 
     138                     WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
     139                  ENDIF 
     140                  STOP 'trc_dta' 
     141               ENDIF 
     142 
     143               IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     144                  IF(lwp) THEN 
     145                     WRITE(numout,*) ' ' 
     146                     WRITE(numout,*) 'problem with dimensions' 
     147                     WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
     148                     WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
     149                     WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
     150                  ENDIF 
     151                  STOP 'trc_dta' 
     152               ENDIF 
     153               IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numtr(jn) 
     154               trdta(:,:,:,jn) = 0. 
     155 
     156            ENDIF 
     157 
     158 
     159            ! Read montly file 
     160            IF( ( kt == nit000 .AND. nlectr(jn) == 0)   &  
     161               .OR. imois /= ntrc1(jn) ) THEN 
     162               nlectr(jn) = 1 
     163 
     164               ! Calendar computation 
     165 
     166               ! ntrc1 number of the first file record used in the simulation 
     167               ! ntrc2 number of the last  file record 
     168 
     169               ntrc1(jn) = imois 
     170               ntrc2(jn) = ntrc1(jn) + 1 
     171               ntrc1(jn) = MOD( ntrc1(jn), iman ) 
     172               IF ( ntrc1(jn) == 0 ) ntrc1(jn) = iman 
     173               ntrc2(jn) = MOD( ntrc2(jn), iman ) 
     174               IF ( ntrc2(jn) == 0 ) ntrc2(jn) = iman 
     175               IF(lwp) WRITE(numout,*) 'first record file used ntrc1 ', ntrc1(jn)  
     176               IF(lwp) WRITE(numout,*) 'last  record file used ntrc2 ', ntrc2(jn) 
     177 
     178               ! Read montly passive tracer data Levitus  
     179 
     180               CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,    & 
     181                  jpmois,ntrc1(jn),ntrc1(jn),mig(1),nlci,mjg(1),nlcj,  & 
     182                  tracdta(1:nlci,1:nlcj,1:jpk,jn,1)                  ) 
     183 
     184               CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,     & 
     185                  jpmois,ntrc2(jn),ntrc2(jn),mig(1),nlci,mjg(1),nlcj,   & 
     186                  tracdta(1:nlci,1:nlcj,1:jpk,jn,2)                  ) 
     187 
     188               IF(lwp) THEN 
     189                  WRITE(numout,*) 
     190                  WRITE(numout,*) ' read tracer data ', ctrcnm(jn),' ok' 
     191                  WRITE(numout,*) 
     192               ENDIF 
     193 
     194               ! Apply Mask 
     195               DO jl = 1, 2 
     196                  tracdta(:,:,:  ,jn,jl) = tracdta(:,:,:,jn,jl) * tmask(:,:,:)  
     197                  tracdta(:,:,jpk,jn,jl) = 0. 
     198                  IF( lk_zps ) THEN                ! z-coord. with partial steps 
     199                     DO jj = 1, jpj                ! interpolation of temperature at the last level 
     200                        DO ji = 1, jpi 
     201                           ik = mbathy(ji,jj) - 1 
     202                           IF( ik > 2 ) THEN 
     203                              zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
     204                              tracdta(ji,jj,ik,jn,jl) = (1.-zl) * tracdta(ji,jj,ik,jn,jl) + zl * tracdta(ji,jj,ik-1,jn,jl) 
     205                           ENDIF 
     206                        END DO 
     207                     END DO 
     208                  ENDIF 
     209 
     210               END DO 
     211 
     212            ENDIF 
     213 
    137214            IF(lwp) THEN 
    138               WRITE(numout,*) ' ' 
    139               WRITE(numout,*) 'problem with time coordinates' 
    140               WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
    141             ENDIF 
    142             STOP 'trc_dta' 
    143           ENDIF 
    144  
    145           IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
    146             IF(lwp) THEN 
    147               WRITE(numout,*) ' ' 
    148               WRITE(numout,*) 'problem with dimensions' 
    149               WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
    150               WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
    151               WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
    152             ENDIF 
    153             STOP 'trc_dta' 
    154           ENDIF 
    155           IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numtr(jn) 
    156           trdta(:,:,:,jn) = 0. 
    157  
    158         ENDIF 
    159  
    160  
    161 ! Read montly file 
    162         IF( ( kt == nit000 .AND. nlectr(jn) == 0)   &  
    163               .OR. imois /= ntrc1(jn) ) THEN 
    164            nlectr(jn) = 1 
    165  
    166 ! Calendar computation 
    167  
    168 ! ntrc1 number of the first file record used in the simulation 
    169 ! ntrc2 number of the last  file record 
    170  
    171           ntrc1(jn) = imois 
    172           ntrc2(jn) = ntrc1(jn) + 1 
    173           ntrc1(jn) = MOD( ntrc1(jn), iman ) 
    174           IF ( ntrc1(jn) == 0 ) ntrc1(jn) = iman 
    175           ntrc2(jn) = MOD( ntrc2(jn), iman ) 
    176           IF ( ntrc2(jn) == 0 ) ntrc2(jn) = iman 
    177           IF(lwp) WRITE(numout,*) 'first record file used ntrc1 ', ntrc1(jn)  
    178           IF(lwp) WRITE(numout,*) 'last  record file used ntrc2 ', ntrc2(jn) 
    179  
    180 ! Read montly passive tracer data Levitus  
    181  
    182           CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,    & 
    183                jpmois,ntrc1(jn),ntrc1(jn),mig(1),nlci,mjg(1),nlcj,  & 
    184                tracdta(1:nlci,1:nlcj,1:jpk,jn,1)                  ) 
    185  
    186           CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,     & 
    187                jpmois,ntrc2(jn),ntrc2(jn),mig(1),nlci,mjg(1),nlcj,   & 
    188                tracdta(1:nlci,1:nlcj,1:jpk,jn,2)                  ) 
    189  
    190           IF(lwp) THEN 
    191             WRITE(numout,*) 
    192             WRITE(numout,*) ' read tracer data ', ctrcnm(jn),' ok' 
    193             WRITE(numout,*) 
    194           ENDIF 
    195  
    196 ! Apply Mask 
    197           DO jl = 1, 2 
    198             tracdta(:,:,:  ,jn,jl) = tracdta(:,:,:,jn,jl) * tmask(:,:,:)  
    199             tracdta(:,:,jpk,jn,jl) = 0. 
    200             IF( lk_zps ) THEN                ! z-coord. with partial steps 
    201                DO jj = 1, jpj                ! interpolation of temperature at the last level 
    202                   DO ji = 1, jpi 
    203                      ik = mbathy(ji,jj) - 1 
    204                      IF( ik > 2 ) THEN 
    205                         zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
    206                         tracdta(ji,jj,ik,jn,jl) = (1.-zl) * tracdta(ji,jj,ik,jn,jl) + zl * tracdta(ji,jj,ik-1,jn,jl) 
    207                      ENDIF 
    208                   END DO 
    209                END DO 
    210             ENDIF 
    211  
    212           END DO 
    213  
    214         ENDIF 
    215  
    216         IF(lwp) THEN 
    217           WRITE(numout,*) ctrcnm(jn), 'Levitus month ', ntrc1(jn),   & 
    218                           ntrc2(jn) 
    219           WRITE(numout,*) 
    220           WRITE(numout,*) ' Levitus month = ', ntrc1(jn),   & 
     215               WRITE(numout,*) ctrcnm(jn), 'Levitus month ', ntrc1(jn),   & 
     216                  ntrc2(jn) 
     217               WRITE(numout,*) 
     218               WRITE(numout,*) ' Levitus month = ', ntrc1(jn),   & 
    221219                  '  level = 1' 
    222           CALL prihre( tracdta(1,1,1,jn,1), jpi, jpj, 1, jpi, 20, 1   & 
     220               CALL prihre( tracdta(1,1,1,jn,1), jpi, jpj, 1, jpi, 20, 1   & 
    223221                  ,jpj, 20, 1., numout ) 
    224           WRITE(numout,*) ' Levitus month = ', ntrc1(jn),    & 
     222               WRITE(numout,*) ' Levitus month = ', ntrc1(jn),    & 
    225223                  '  level = ',jpk/2 
    226           CALL prihre( tracdta(1,1,jpk/2,jn,1), jpi, jpj, 1, jpi,    & 
     224               CALL prihre( tracdta(1,1,jpk/2,jn,1), jpi, jpj, 1, jpi,    & 
    227225                  20, 1, jpj, 20, 1., numout ) 
    228           WRITE(numout,*) ' Levitus month = ',ntrc1(jn)     & 
     226               WRITE(numout,*) ' Levitus month = ',ntrc1(jn)     & 
    229227                  ,'  level = ',jpkm1 
    230           CALL prihre( tracdta(1,1,jpkm1,jn,1), jpi, jpj, 1, jpi,     & 
     228               CALL prihre( tracdta(1,1,jpkm1,jn,1), jpi, jpj, 1, jpi,     & 
    231229                  20, 1, jpj, 20, 1., numout ) 
    232         ENDIF  
    233  
    234 ! At every time step compute temperature data 
    235  
    236         zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 
    237         trdta(:,:,:,jn)=  ( 1. - zxy ) * tracdta(:,:,:,jn,1)    & 
    238                        +       zxy   * tracdta(:,:,:,jn,2)  
    239     
    240         IF( jn == jpno3) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 7.6E-6 
    241         IF( jn == jpdic) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
    242         IF( jn == jptal) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
    243         IF( jn == jpoxy) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 44.6E-6 
    244         IF( jn == jpsil) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
    245  
    246  
    247       ENDIF 
     230            ENDIF 
     231 
     232            ! At every time step compute temperature data 
     233 
     234            zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 
     235            trdta(:,:,:,jn)=  ( 1. - zxy ) * tracdta(:,:,:,jn,1)    & 
     236               +       zxy   * tracdta(:,:,:,jn,2)  
     237 
     238            IF( jn == jpno3) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 7.6E-6 
     239            IF( jn == jpdic) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
     240            IF( jn == jptal) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
     241            IF( jn == jpoxy) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 44.6E-6 
     242            IF( jn == jpsil) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6 
     243 
     244 
     245         ENDIF 
    248246 
    249247      END DO 
Note: See TracChangeset for help on using the changeset viewer.