Changeset 2861


Ignore:
Timestamp:
2011-09-26T13:49:48+02:00 (9 years ago)
Author:
cetlod
Message:

dev_r2787_LOCEAN_offline_fldread:bug correction to ensure restartabililty

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2787_LOCEAN_offline_fldread/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90

    r2821 r2861  
    124124       
    125125      isecsbc = nsec_year + nsec1jan000  
    126        
    127       IF( kt /= nit000 ) THEN 
    128           nrecprev_tem = sf_dyn(jf_tem)%nrec_a(2) 
    129           nrecprev_uwd = sf_dyn(jf_uwd)%nrec_a(2) 
    130       ENDIF 
    131  
    132       CALL fld_read( kt, 1, sf_dyn )      !==   read data at kt time step   ==! 
    133  
     126      ! 
     127      IF( kt == nit000 ) THEN 
     128         nrecprev_tem = 0 
     129         nrecprev_uwd = 0 
     130         ! 
     131         CALL fld_read( kt, 1, sf_dyn )      !==   read data at kt time step   ==! 
     132         ! 
     133         IF( lk_ldfslp .AND. sf_dyn(jf_tem)%ln_tint ) THEN    ! Computes slopes (here avt is used as workspace)                        
     134            zts(:,:,:,jf_tem) = sf_dyn(jf_tem)%fdta(:,:,:,1) * tmask(:,:,:)   ! temperature 
     135            zts(:,:,:,jf_sal) = sf_dyn(jf_sal)%fdta(:,:,:,1) * tmask(:,:,:)   ! salinity  
     136            avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,1) * tmask(:,:,:)   ! vertical diffusive coef. 
     137            CALL dta_dyn_slp( kt, zts, zuslp, zvslp, zwslpi, zwslpj ) 
     138            uslpdta (:,:,:,1) = zuslp (:,:,:)  
     139            vslpdta (:,:,:,1) = zvslp (:,:,:)  
     140            wslpidta(:,:,:,1) = zwslpi(:,:,:)  
     141            wslpjdta(:,:,:,1) = zwslpj(:,:,:)  
     142         ENDIF 
     143         IF( ln_dynwzv .AND. sf_dyn(jf_uwd)%ln_tint )  THEN    ! compute vertical velocity from u/v 
     144            zu(:,:,:) = sf_dyn(jf_uwd)%fdta(:,:,:,1) 
     145            zv(:,:,:) = sf_dyn(jf_vwd)%fdta(:,:,:,1) 
     146            CALL dta_dyn_wzv( zu, zv, zw ) 
     147            wdta(:,:,:,1) = zw(:,:,:) * tmask(:,:,:) 
     148         ENDIF 
     149      ELSE 
     150         nrecprev_tem = sf_dyn(jf_tem)%nrec_a(2) 
     151         nrecprev_uwd = sf_dyn(jf_uwd)%nrec_a(2) 
     152         ! 
     153         CALL fld_read( kt, 1, sf_dyn )      !==   read data at kt time step   ==! 
     154         ! 
     155      ENDIF 
    134156      !  
    135157      IF( lk_ldfslp ) THEN    ! Computes slopes (here avt is used as workspace)                        
     
    140162            write(numout,*) ' Compute new slopes at kt = ', kt 
    141163            IF( sf_dyn(jf_tem)%ln_tint ) THEN                 ! time interpolation of data 
    142                uslpdta (:,:,:,1) =  uslpdta (:,:,:,2)     ! swap the data 
    143                vslpdta (:,:,:,1) =  vslpdta (:,:,:,2)   
    144                wslpidta(:,:,:,1) =  wslpidta(:,:,:,2)  
    145                wslpjdta(:,:,:,1) =  wslpjdta(:,:,:,2)  
     164               IF( kt /= nit000 ) THEN 
     165                  uslpdta (:,:,:,1) =  uslpdta (:,:,:,2)         ! swap the data 
     166                  vslpdta (:,:,:,1) =  vslpdta (:,:,:,2)   
     167                  wslpidta(:,:,:,1) =  wslpidta(:,:,:,2)  
     168                  wslpjdta(:,:,:,1) =  wslpjdta(:,:,:,2)  
     169               ENDIF 
    146170               ! 
    147171               zts(:,:,:,jf_tem) = sf_dyn(jf_tem)%fdta(:,:,:,2) * tmask(:,:,:)   ! temperature 
     
    149173               avt(:,:,:)        = sf_dyn(jf_avt)%fdta(:,:,:,2) * tmask(:,:,:)   ! vertical diffusive coef. 
    150174               CALL dta_dyn_slp( kt, zts, zuslp, zvslp, zwslpi, zwslpj ) 
     175               ! 
    151176               uslpdta (:,:,:,2) = zuslp (:,:,:)  
    152177               vslpdta (:,:,:,2) = zvslp (:,:,:)  
     
    184209         IF(  kt /= nit000 .AND. ( sf_dyn(jf_uwd)%nrec_a(2) - nrecprev_uwd ) /= 0 )  iswap_uwd = 1 
    185210         IF( ( isecsbc > sf_dyn(jf_uwd)%nrec_b(2) .AND. iswap_uwd == 1 ) .OR. kt == nit000 )  THEN    ! read/update the after data 
     211            write(numout,*) 
    186212            write(numout,*) ' Compute new vertical velocity at kt = ', kt 
    187213            write(numout,*) 
    188214            IF( sf_dyn(jf_uwd)%ln_tint ) THEN                 ! time interpolation of data 
    189                wdta(:,:,:,1) =  wdta(:,:,:,2)           ! swap the data 
     215               IF( kt /= nit000 )  THEN 
     216                  wdta(:,:,:,1) =  wdta(:,:,:,2)     ! swap the data for initialisation 
     217               ENDIF 
    190218               zu(:,:,:) = sf_dyn(jf_uwd)%fdta(:,:,:,2) 
    191219               zv(:,:,:) = sf_dyn(jf_vwd)%fdta(:,:,:,2) 
     
    438466      ENDIF 
    439467      ! 
    440       nrecprev_tem = 0 
    441       nrecprev_uwd = 0 
    442       ! 
    443468      CALL dta_dyn( nit000 ) 
    444469      ! 
Note: See TracChangeset for help on using the changeset viewer.