Changeset 3285


Ignore:
Timestamp:
2012-01-27T14:23:13+01:00 (9 years ago)
Author:
hliu
Message:

Save some computation time in the modified version of dynzdf_imp.F90 in r3280

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r3280 r3285  
    6666      !!---------------------------------------------------------------------- 
    6767 
    68       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwi, zwd, zws, zavmu, zavmv 
     68      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwi, zwd, zws 
     69      REAL(wp), POINTER, DIMENSION(:,:)   ::  zavmu, zavmv 
    6970      !!---------------------------------------------------------------------- 
    7071      ! 
    7172      IF( nn_timing == 1 )  CALL timing_start('dyn_zdf_imp') 
    7273      ! 
    73       CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws, zavmu, zavmv )  
     74      CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws )  
     75      CALL wrk_alloc( jpi,jpj, zavmu, zavmv )  
    7476      ! 
    7577      IF( kt == nit000 ) THEN 
     
    8991      ! column vector of the tri-diagonal matrix equation 
    9092      ! 
    91      DO jk = 1, jpk 
    92         DO jj = 1, jpj 
    93            DO ji =1, jpi 
    94               zavmu(ji,jj,jk) = avmu(ji,jj,jk) 
    95               zavmv(ji,jj,jk) = avmv(ji,jj,jk) 
    96            END DO 
    97         END DO 
    98       END DO 
    9993 
    10094      IF( ln_bfrimp ) THEN 
     
    108102            ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
    109103            ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
    110             zavmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * fse3uw(ji,jj,ikbu+1)  
    111             zavmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * fse3vw(ji,jj,ikbv+1) 
     104            zavmu(ji,jj) = avmu(ji,jj,ikbu+1) 
     105            zavmv(ji,jj) = avmv(ji,jj,ikbv+1) 
     106            avmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * fse3uw(ji,jj,ikbu+1)  
     107            avmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * fse3vw(ji,jj,ikbv+1) 
    112108         END DO 
    113109      END DO 
     
    124120            DO ji = fs_2, fs_jpim1   ! vector opt. 
    125121               zcoef = - p2dt / fse3u(ji,jj,jk) 
    126                zzwi          = zcoef * zavmu (ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
     122               zzwi          = zcoef * avmu (ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
    127123               zwi(ji,jj,jk) = zzwi  * umask(ji,jj,jk) 
    128                zzws          = zcoef * zavmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
     124               zzws          = zcoef * avmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
    129125               zws(ji,jj,jk) = zzws  * umask(ji,jj,jk+1) 
    130126               zwd(ji,jj,jk) = 1._wp - zwi(ji,jj,jk) - zzws 
     
    210206            DO ji = fs_2, fs_jpim1   ! vector opt. 
    211207               zcoef = -p2dt / fse3v(ji,jj,jk) 
    212                zzwi          = zcoef * zavmv (ji,jj,jk  ) / fse3vw(ji,jj,jk  ) 
     208               zzwi          = zcoef * avmv (ji,jj,jk  ) / fse3vw(ji,jj,jk  ) 
    213209               zwi(ji,jj,jk) =  zzwi * vmask(ji,jj,jk) 
    214                zzws          = zcoef * zavmv (ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 
     210               zzws          = zcoef * avmv (ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 
    215211               zws(ji,jj,jk) =  zzws * vmask(ji,jj,jk+1) 
    216212               zwd(ji,jj,jk) = 1._wp - zwi(ji,jj,jk) - zzws 
     
    284280         END DO 
    285281      END DO 
    286       ! 
    287       CALL wrk_dealloc( jpi,jpj,jpk, zwi, zwd, zws, zavmu, zavmv )  
     282 
     283      !! restore bottom layer avmu(v)  
     284      IF( ln_bfrimp ) THEN 
     285# if defined key_vectopt_loop 
     286      DO jj = 1, 1 
     287         DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
     288# else 
     289      DO jj = 2, jpjm1 
     290         DO ji = 2, jpim1 
     291# endif 
     292            ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
     293            ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
     294            avmu(ji,jj,ikbu+1) = zavmu(ji,jj) 
     295            avmv(ji,jj,ikbv+1) = zavmv(ji,jj) 
     296         END DO 
     297      END DO 
     298      ENDIF 
     299      ! 
     300      CALL wrk_dealloc( jpi,jpj,jpk, zwi, zwd, zws)  
     301      CALL wrk_dealloc( jpi,jpj, zavmu, zavmv)  
    288302      ! 
    289303      IF( nn_timing == 1 )  CALL timing_stop('dyn_zdf_imp') 
Note: See TracChangeset for help on using the changeset viewer.