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 6688 for branches/2015/nemo_v3_6_STABLE/NEMOGCM – NEMO

Ignore:
Timestamp:
2016-06-13T14:50:45+02:00 (8 years ago)
Author:
lovato
Message:

#1677 - v3.6_STABLE: Update code for passive tracers data input and restoring

Location:
branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r6471 r6688  
    158158         ELSE                                         ! No restart or restart not found: Euler forward time stepping 
    159159            zfact = 1._wp 
     160            sbc_tsc(:,:,:) = 0._wp 
    160161            sbc_tsc_b(:,:,:) = 0._wp 
    161162         ENDIF 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90

    r6606 r6688  
    8585      CHARACTER (len=22) :: charout 
    8686      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrd 
    87       REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 3D  workspace 
     87      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta   ! 3D  workspace 
    8888      !!---------------------------------------------------------------------- 
    8989      ! 
     
    9898      IF( nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping 
    9999         ! 
    100          CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
    101          CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
     100         CALL wrk_alloc( jpi, jpj, jpk, ztrcdta )    ! Memory allocation 
    102101         !                                                          ! =========== 
    103102         DO jn = 1, jptra                                           ! tracer loop 
     
    106105            ! 
    107106            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
     107                
    108108               jl = n_trc_index(jn)  
     109               CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
     110 
    109111               SELECT CASE ( nn_zdmp_tr ) 
    110112               ! 
     
    113115                     DO jj = 2, jpjm1 
    114116                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    115                            ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
     117                           ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    116118                           tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    117119                        END DO 
     
    124126                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    125127                           IF( avt(ji,jj,jk) <= 5.e-4_wp )  THEN  
    126                               ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
     128                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    127129                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    128130                           ENDIF 
     
    136138                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    137139                           IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    138                               ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
     140                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    139141                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    140142                           END IF 
     
    154156         END DO                                                     ! tracer loop 
    155157         !                                                          ! =========== 
    156          CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
     158         CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 
    157159      ENDIF 
    158160      ! 
     
    184186      INTEGER :: ji , jj, jk, jn, jl, jc                     ! dummy loop indicesa 
    185187      INTEGER :: isrow                                      ! local index 
    186       REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 3D  workspace 
     188      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta       ! 3D  workspace 
    187189 
    188190      !!---------------------------------------------------------------------- 
     
    228230            nctsi1(8)   = 297  ; nctsj1(8)   = 270 - isrow 
    229231            nctsi2(8)   = 308  ; nctsj2(8)   = 293 - isrow 
    230                                  
     232            !                                         
    231233            !                                           ! ======================= 
    232234            CASE ( 2 )                                  !  ORCA_R2 configuration 
     
    296298         IF(lwp)  WRITE(numout,*) 
    297299         ! 
    298          CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
    299          CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
     300         CALL wrk_alloc( jpi, jpj, jpk, ztrcdta )   ! Memory allocation 
    300301         ! 
    301302         DO jn = 1, jptra 
    302303            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    303304                jl = n_trc_index(jn) 
    304                 IF(lwp)  WRITE(numout,*) 
     305                CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
    305306                DO jc = 1, npncts 
    306307                   DO jk = 1, jpkm1 
    307308                      DO jj = nctsj1(jc), nctsj2(jc) 
    308309                         DO ji = nctsi1(jc), nctsi2(jc) 
    309                             trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) 
     310                            trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk) 
    310311                            trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
    311312                         ENDDO 
     
    315316             ENDIF 
    316317          ENDDO 
    317           CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
    318           ! 
     318          CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 
    319319      ENDIF 
    320320      ! 
     
    336336      IF( nn_timing == 1 )  CALL timing_start('trc_dmp_init') 
    337337      ! 
     338      !Allocate arrays 
     339      IF( trc_dmp_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trc_dmp_init: unable to allocate arrays' ) 
    338340 
    339341      IF( lzoom )   nn_zdmp_tr = 0           ! restoring to climatology at closed north or south boundaries 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcdta.F90

    r6606 r6688  
    7777      ALLOCATE( n_trc_index(ntrc), slf_i(ntrc), STAT=ierr0 ) 
    7878      IF( ierr0 > 0 ) THEN 
    79          CALL ctl_stop( 'trc_nam: unable to allocate n_trc_index' )   ;   RETURN 
     79         CALL ctl_stop( 'trc_dta_init: unable to allocate n_trc_index' )   ;   RETURN 
    8080      ENDIF 
    8181      nb_trcdta      = 0 
     
    9191      IF(lwp) THEN 
    9292         WRITE(numout,*) ' ' 
     93         WRITE(numout,*) 'trc_dta_init : Passive tracers Initial Conditions ' 
     94         WRITE(numout,*) '~~~~~~~~~~~~~~ ' 
    9395         WRITE(numout,*) ' number of passive tracers to be initialize by data :', ntra 
    9496         WRITE(numout,*) ' ' 
     
    107109         DO jn = 1, ntrc 
    108110            IF( ln_trc_ini(jn) )  THEN    ! open input file only if ln_trc_ini(jn) is true 
    109                clndta = TRIM( sn_trcdta(jn)%clvar )  
    110                clntrc = TRIM( ctrcnm   (jn)       )  
     111               clndta = TRIM( sn_trcdta(jn)%clvar ) 
     112               if (jn > jptra) then 
     113                  clntrc='Dummy' ! By pass weird formats in ocean.output if ntrc > jptra 
     114               else 
     115                  clntrc = TRIM( ctrcnm   (jn)       ) 
     116               endif 
    111117               zfact  = rn_trfac(jn) 
    112                IF( clndta /=  clntrc ) THEN  
    113                   CALL ctl_warn( 'trc_dta_init: passive tracer data initialisation :  ',   & 
    114                   &              'the variable name in the data file : '//clndta//   &  
    115                   &              '  must be the same than the name of the passive tracer : '//clntrc//' ') 
     118               IF( clndta /=  clntrc ) THEN 
     119                  CALL ctl_warn( 'trc_dta_init: passive tracer data initialisation    ',   & 
     120                  &              'Input name of data file : '//TRIM(clndta)//   & 
     121                  &              ' differs from that of tracer : '//TRIM(clntrc)//' ') 
    116122               ENDIF 
    117                WRITE(numout,*) ' read an initial file for passive tracer number :', jn, ' name : ', clndta, &  
    118                &               ' multiplicative factor : ', zfact 
     123               WRITE(numout,'(a, i4,3a,e11.3)') ' Read IC file for tracer number :', & 
     124               &            jn, ', name : ', TRIM(clndta), ', Multiplicative Scaling factor : ', zfact 
    119125            ENDIF 
    120126         END DO 
     
    124130         ALLOCATE( sf_trcdta(nb_trcdta), rf_trfac(nb_trcdta), STAT=ierr1 ) 
    125131         IF( ierr1 > 0 ) THEN 
    126             CALL ctl_stop( 'trc_dta_ini: unable to allocate  sf_trcdta structure' )   ;   RETURN 
     132            CALL ctl_stop( 'trc_dta_init: unable to allocate  sf_trcdta structure' )   ;   RETURN 
    127133         ENDIF 
    128134         ! 
     
    135141               IF( sn_trcdta(jn)%ln_tint )  ALLOCATE( sf_trcdta(jl)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 
    136142               IF( ierr2 + ierr3 > 0 ) THEN 
    137                  CALL ctl_stop( 'trc_dta : unable to allocate passive tracer data arrays' )   ;   RETURN 
     143                 CALL ctl_stop( 'trc_dta_init : unable to allocate passive tracer data arrays' )   ;   RETURN 
    138144               ENDIF 
    139145            ENDIF 
     
    141147         ENDDO 
    142148         !                         ! fill sf_trcdta with slf_i and control print 
    143          CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta', 'Passive tracer data', 'namtrc' ) 
     149         CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta_init', 'Passive tracer data', 'namtrc' ) 
    144150         ! 
    145151      ENDIF 
     
    151157 
    152158 
    153    SUBROUTINE trc_dta( kt, ptrc ) 
     159   SUBROUTINE trc_dta( kt, sf_dta, ptrfac, ptrc) 
    154160      !!---------------------------------------------------------------------- 
    155161      !!                   ***  ROUTINE trc_dta  *** 
     
    161167      !!              - ln_trcdmp=F: deallocates the data structure as they are not used 
    162168      !! 
    163       !! ** Action  :   sf_trcdta   passive tracer data on medl mesh and interpolated at time-step kt 
    164       !!---------------------------------------------------------------------- 
    165       INTEGER                       , INTENT(in   ) ::   kt     ! ocean time-step 
    166       REAL(wp), DIMENSION(jpi,jpj,jpk,nb_trcdta), INTENT(inout) ::   ptrc     ! array of information on the field to read 
     169      !! ** Action  :   sf_dta   passive tracer data on medl mesh and interpolated at time-step kt 
     170      !!---------------------------------------------------------------------- 
     171      INTEGER                     , INTENT(in   ) ::   kt     ! ocean time-step 
     172      TYPE(FLD), DIMENSION(1)     , INTENT(inout) ::   sf_dta     ! array of information on the field to read 
     173      REAL(wp)                    , INTENT(in   ) ::   ptrfac  ! multiplication factor 
     174      REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL  , INTENT(out  ) ::   ptrc 
    167175      ! 
    168176      INTEGER ::   ji, jj, jk, jl, jkk, ik    ! dummy loop indices 
    169177      REAL(wp)::   zl, zi 
    170178      REAL(wp), DIMENSION(jpk) ::  ztp                ! 1D workspace 
     179      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta   ! 3D  workspace 
    171180      CHARACTER(len=100) :: clndta 
    172181      !!---------------------------------------------------------------------- 
     
    176185      IF( nb_trcdta > 0 ) THEN 
    177186         ! 
    178          CALL fld_read( kt, 1, sf_trcdta )      !==   read data at kt time step   ==! 
    179          ! 
    180          DO jl = 1, nb_trcdta 
    181             ptrc(:,:,:,jl) = sf_trcdta(jl)%fnow(:,:,:) * tmask(:,:,:)    ! Mask 
    182          ENDDO 
     187         CALL wrk_alloc( jpi, jpj, jpk, ztrcdta )    ! Memory allocation 
     188         ! 
     189         CALL fld_read( kt, 1, sf_dta )      !==   read data at kt time step   ==! 
     190         ztrcdta(:,:,:) = sf_dta(1)%fnow(:,:,:) * tmask(:,:,:)    ! Mask 
    183191         ! 
    184192         IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     
    188196               WRITE(numout,*) 'trc_dta: interpolates passive tracer data onto the s- or mixed s-z-coordinate mesh' 
    189197            ENDIF 
    190             DO jl = 1, nb_trcdta 
    191                DO jj = 1, jpj                         ! vertical interpolation of T & S 
    192                   DO ji = 1, jpi 
    193                      DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
    194                         zl = fsdept_n(ji,jj,jk) 
    195                         IF(     zl < gdept_1d(1  ) ) THEN         ! above the first level of data 
    196                            ztp(jk) =  ptrc(ji,jj,1,jl) 
    197                         ELSEIF( zl > gdept_1d(jpk) ) THEN         ! below the last level of data 
    198                            ztp(jk) =  ptrc(ji,jj,jpkm1,jl) 
    199                         ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
    200                            DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
    201                               IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
    202                                  zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
    203                                  ztp(jk) = ptrc(ji,jj,jkk,jl) + ( ptrc(ji,jj,jkk+1,jl) - ptrc(ji,jj,jkk,jl) ) * zi  
    204                               ENDIF 
    205                            END DO 
    206                         ENDIF 
    207                      END DO 
    208                      DO jk = 1, jpkm1 
    209                         ptrc(ji,jj,jk,jl) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
    210                      END DO 
    211                      ptrc(ji,jj,jpk,jl) = 0._wp 
     198            ! 
     199            DO jj = 1, jpj                         ! vertical interpolation of T & S 
     200               DO ji = 1, jpi 
     201                  DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
     202                     zl = fsdept_n(ji,jj,jk) 
     203                     IF(     zl < gdept_1d(1  ) ) THEN         ! above the first level of data 
     204                        ztp(jk) = ztrcdta(ji,jj,1) 
     205                     ELSEIF( zl > gdept_1d(jpk) ) THEN         ! below the last level of data 
     206                        ztp(jk) =  ztrcdta(ji,jj,jpkm1) 
     207                     ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
     208                        DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
     209                           IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
     210                              zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
     211                              ztp(jk) = ztrcdta(ji,jj,jkk) + ( ztrcdta(ji,jj,jkk+1) - & 
     212                                        ztrcdta(ji,jj,jkk) ) * zi  
     213                           ENDIF 
     214                        END DO 
     215                     ENDIF 
    212216                  END DO 
    213                END DO 
     217                  DO jk = 1, jpkm1 
     218                    ztrcdta(ji,jj,jk) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
     219                  END DO 
     220                  ztrcdta(ji,jj,jpk) = 0._wp 
     221                END DO 
    214222            END DO 
    215223            !  
    216224         ELSE                                !==   z- or zps- coordinate   ==! 
    217             !                              
     225            ! 
    218226            IF( ln_zps ) THEN                      ! zps-coordinate (partial steps) interpolation at the last ocean level 
    219                DO jl = 1, nb_trcdta 
    220                   ! 
    221                   DO jj = 1, jpj 
    222                      DO ji = 1, jpi 
    223                         ik = mbkt(ji,jj)  
    224                         IF( ik > 1 ) THEN 
    225                            zl = ( gdept_1d(ik) - fsdept_n(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    226                            ptrc(ji,jj,ik,jl) = (1.-zl) * ptrc(ji,jj,ik,jl) + zl * ptrc(ji,jj,ik-1,jl) 
    227                         ENDIF 
    228                         ik = mikt(ji,jj) 
    229                         IF( ik > 1 ) THEN 
    230                            zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 
    231                            ptrc(ji,jj,ik,jl) = (1.-zl) * ptrc(ji,jj,ik,jl) + zl * ptrc(ji,jj,ik+1,jl) 
    232                         ENDIF 
    233                      END DO 
     227               DO jj = 1, jpj 
     228                  DO ji = 1, jpi 
     229                     ik = mbkt(ji,jj)  
     230                     IF( ik > 1 ) THEN 
     231                        zl = ( gdept_1d(ik) - fsdept_n(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     232                        ztrcdta(ji,jj,ik) = (1.-zl) * ztrcdta(ji,jj,ik) + zl * ztrcdta(ji,jj,ik-1) 
     233                     ENDIF 
     234                     ik = mikt(ji,jj) 
     235                     IF( ik > 1 ) THEN 
     236                        zl = ( fsdept_n(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 
     237                        ztrcdta(ji,jj,ik) = (1.-zl) * ztrcdta(ji,jj,ik) + zl * ztrcdta(ji,jj,ik+1) 
     238                     ENDIF 
    234239                  END DO 
    235               END DO 
    236             ENDIF 
    237             ! 
    238          ENDIF 
    239          ! 
    240       ENDIF 
    241       !  
    242       IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN      !== deallocate data structure   ==! 
    243         !                                                    (data used only for initialisation) 
    244         IF(lwp) WRITE(numout,*) 'trc_dta: deallocate data arrays as they are only used to initialize the run' 
    245         DO jl = 1, nb_trcdta 
    246                                         DEALLOCATE( sf_trcdta(jl)%fnow)     !  arrays in the structure 
    247            IF( sf_trcdta(jl)%ln_tint )  DEALLOCATE( sf_trcdta(jl)%fdta) 
    248         ENDDO 
     240               END DO 
     241            ENDIF 
     242            ! 
     243         ENDIF 
     244         ! 
     245         ! Add multiplicative factor 
     246         ztrcdta(:,:,:) = ztrcdta(:,:,:) * ptrfac 
     247         ! 
     248         ! Data structure for trc_ini (and BFMv5.1 coupling) 
     249         IF( .NOT. PRESENT(ptrc) ) sf_dta(1)%fnow(:,:,:) = ztrcdta(:,:,:) 
     250         ! 
     251         ! Data structure for trc_dmp 
     252         IF( PRESENT(ptrc) )  ptrc(:,:,:) = ztrcdta(:,:,:) 
     253         ! 
     254         IF( lwp .AND. kt == nit000 ) THEN 
     255               clndta = TRIM( sf_dta(1)%clvar )  
     256               WRITE(numout,*) ''//clndta//' data ' 
     257               WRITE(numout,*) 
     258               WRITE(numout,*)'  level = 1' 
     259               CALL prihre( ztrcdta(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
     260               WRITE(numout,*)'  level = ', jpk/2 
     261               CALL prihre( ztrcdta(:,:,jpk/2), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
     262               WRITE(numout,*)'  level = ', jpkm1 
     263               CALL prihre( ztrcdta(:,:,jpkm1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
     264               WRITE(numout,*) 
     265         ENDIF 
     266         ! 
     267         CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 
     268         ! 
    249269      ENDIF 
    250270      ! 
     
    257277   !!---------------------------------------------------------------------- 
    258278CONTAINS 
    259    SUBROUTINE trc_dta( kt, sf_trcdta, zrf_trfac )        ! Empty routine 
     279   SUBROUTINE trc_dta( kt, sf_dta, ptrfac, ptrc)        ! Empty routine 
    260280      WRITE(*,*) 'trc_dta: You should not have seen this print! error?', kt 
    261281   END SUBROUTINE trc_dta 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r6606 r6688  
    3030   USE trcsub          ! variables to substep passive tracers 
    3131   USE lib_mpp         ! distribued memory computing library 
    32    USE wrk_nemo 
    3332   USE sbc_oce 
    3433   USE trcice          ! tracers in sea ice 
     
    6261      INTEGER ::   jk, jn, jl    ! dummy loop indices 
    6362      CHARACTER (len=25) :: charout 
    64       REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrcdta 
    6563      !!--------------------------------------------------------------------- 
    6664      ! 
     
    122120        IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping 
    123121            ! 
    124             CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
    125             ! 
    126             CALL trc_dta( nit000, ztrcdta )   ! read tracer data at nit000 
    127             ! 
    128122            DO jn = 1, jptra 
    129123               IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    130124                  jl = n_trc_index(jn)  
    131                   trn(:,:,:,jn) = ztrcdta(:,:,:,jl) * rf_trfac(jl) 
     125                  CALL trc_dta( nit000, sf_trcdta(jl), rf_trfac(jl) )   ! read tracer data at nit000 
     126                  trn(:,:,:,jn) = sf_trcdta(jl)%fnow(:,:,:)  
     127                  IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN      !== deallocate data structure   ==! 
     128                     !                                                    (data used only for initialisation) 
     129                     IF(lwp) WRITE(numout,*) 'trc_dta: deallocate data arrays as they are only used to initialize the run' 
     130                                                  DEALLOCATE( sf_trcdta(jl)%fnow )     !  arrays in the structure 
     131                     IF( sf_trcdta(jl)%ln_tint )  DEALLOCATE( sf_trcdta(jl)%fdta ) 
     132                     ! 
     133                  ENDIF 
    132134               ENDIF 
    133135            ENDDO 
    134136            ! 
    135             CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
    136             !  
    137137        ENDIF 
    138138        ! 
Note: See TracChangeset for help on using the changeset viewer.