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 2051 for branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/fldread.F90 – NEMO

Ignore:
Timestamp:
2010-08-13T10:47:35+02:00 (14 years ago)
Author:
cbricaud
Message:

corrections to use on-the-fly interpolation with 3D files in fldread

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/fldread.F90

    r1856 r2051  
    4848      INTEGER , DIMENSION(2)          ::   nrec_b       ! before record (1: index, 2: second since Jan. 1st 00h of nit000 year) 
    4949      INTEGER , DIMENSION(2)          ::   nrec_a       ! after  record (1: index, 2: second since Jan. 1st 00h of nit000 year) 
    50       REAL(wp) , ALLOCATABLE, DIMENSION(:,:,:  ) ::   fnow       ! input fields interpolated to now time step 
     50      REAL(wp) , ALLOCATABLE, DIMENSION(:,:,: ::   fnow       ! input fields interpolated to now time step 
    5151      REAL(wp) , ALLOCATABLE, DIMENSION(:,:,:,:) ::   fdta       ! 2 consecutive record of input fields 
    5252      CHARACTER(len = 256)            ::   wgtname      ! current name of the NetCDF weight file acting as a key 
     
    7878      INTEGER, DIMENSION(:,:,:), POINTER      ::   data_jpj     ! array of source integers 
    7979      REAL(wp), DIMENSION(:,:,:), POINTER     ::   data_wgt     ! array of weights on model grid 
    80       REAL(wp), DIMENSION(:,:), POINTER       ::   fly_dta      ! array of values on input grid 
    81       REAL(wp), DIMENSION(:,:), POINTER       ::   col2         ! temporary array for reading in columns 
     80      REAL(wp), DIMENSION(:,:,:), POINTER     ::   fly_dta      ! array of values on input grid 
     81      REAL(wp), DIMENSION(:,:,:), POINTER     ::   col2         ! temporary array for reading in columns 
    8282   END TYPE WGT 
    8383 
     
    159159 
    160160               ! last record to be read in the current file 
    161                IF( sd(jf)%nfreqh == -1 ) THEN                  ;   ireclast = 12 
     161               IF( sd(jf)%nfreqh == -1 ) THEN 
     162                  IF(     sd(jf)%cltype == 'monthly'   ) THEN  ;   ireclast = 1 
     163                  ELSE                                         ;   ireclast = 12 
     164                  ENDIF 
    162165               ELSE                              
    163166                  IF(     sd(jf)%cltype == 'monthly'   ) THEN  ;   ireclast = 24 * nmonth_len(nmonth) / sd(jf)%nfreqh  
     
    204207 
    205208            ! read after data 
    206             ipk = SIZE( sd(jf)%fdta, 3 ) 
    207209            IF( LEN(TRIM(sd(jf)%wgtname)) > 0 ) THEN 
    208210               CALL wgt_list( sd(jf), kw ) 
    209                DO jk = 1, ipk 
    210                   CALL fld_interp( sd(jf)%num, sd(jf)%clvar, kw, sd(jf)%fdta(:,:,jk,2), sd(jf)%nrec_a(1) ) 
    211                END DO 
     211               ipk =  SIZE(sd(jf)%fdta,3) 
     212               CALL fld_interp( sd(jf)%num, sd(jf)%clvar , kw , ipk, sd(jf)%fdta(:,:,:,2) , sd(jf)%nrec_a(1) ) 
    212213            ELSE 
    213                IF( ipk == 1 ) THEN  
     214               SELECT CASE( SIZE(sd(jf)%fdta,3) ) 
     215               CASE(1) 
    214216                  CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,1,2), sd(jf)%nrec_a(1) ) 
    215                ELSE 
     217               CASE(jpk) 
    216218                  CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,:,2), sd(jf)%nrec_a(1) ) 
    217                ENDIF 
     219               END SELECT 
    218220            ENDIF 
    219221            sd(jf)%rotn(2) = .FALSE. 
     
    255257                         vtmp(:,:) = 0.0 
    256258                         ! 
    257                          DO jk = 1, SIZE( sd(kf)%fdta, 3 ) 
     259                         ipk = SIZE( sd(kf)%fdta(:,:,:,nf) ,3 ) 
     260                         DO jk = 1,ipk 
    258261                            CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->i', utmp(:,:) ) 
    259262                            CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->j', vtmp(:,:) ) 
     
    333336      INTEGER :: inrec          ! number of record existing for this variable 
    334337      INTEGER :: kwgt 
    335       INTEGER :: jk             ! vertical loop variable 
    336       INTEGER :: ipk            ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
     338      INTEGER :: jk             !vertical loop variable 
     339      INTEGER :: ipk            !number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
    337340      CHARACTER(LEN=1000) ::   clfmt   ! write format 
    338341      !!--------------------------------------------------------------------- 
     
    381384            &                  nmonth - COUNT((/llprevmth/)) + 12                   * COUNT((/llprevyr /)),               & 
    382385            &                  nday   - COUNT((/llprevday/)) + nmonth_len(nmonth-1) * COUNT((/llprevmth/)), .NOT. llprev ) 
    383           
     386 
    384387         ! if previous year/month/day file does not exist, we switch to the current year/month/day 
    385388         IF( llprev .AND. sdjf%num == 0 ) THEN 
     
    399402 
    400403         ! read before data into sdjf%fdta(:,:,2) because we will swap data in the following part of fld_read 
    401          ipk = SIZE( sdjf%fdta, 3 ) 
     404          
    402405         IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
    403406            CALL wgt_list( sdjf, kwgt ) 
    404             DO jk = 1, ipk 
    405                CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, sdjf%fdta(:,:,jk,2), sdjf%nrec_b(1) ) 
    406             END DO 
     407            ipk = SIZE(sdjf%fdta,3) 
     408            CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, ipk, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1) ) 
    407409         ELSE 
    408             IF( ipk == 1 ) THEN 
    409                CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_b(1) ) 
    410             ELSE 
    411                CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 
    412             ENDIF 
     410            SELECT CASE ( SIZE(sdjf%fdta,3) ) 
     411            CASE(1) 
     412                CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_b(1) ) 
     413            CASE(jpk) 
     414                CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 
     415            END SELECT 
    413416         ENDIF 
    414417         sdjf%rotn(2) = .FALSE. 
     
    421424      ENDIF 
    422425 
     426 
    423427      IF( sdjf%num == 0 )   CALL fld_clopn( sdjf, nyear, nmonth, nday )   ! make sure current year/month/day file is opened 
    424428 
    425429      sdjf%nswap_sec = nsec_year + nsec1jan000 - 1   ! force read/update the after data in the following part of fld_read  
    426        
     430      
    427431   END SUBROUTINE fld_init 
    428432 
     
    458462            !       forcing record :  nmonth  
    459463            !                             
    460             ztmp  = REAL( nday, wp ) / REAL( nmonth_len(nmonth), wp ) + 0.5 
     464            ztmp  = 0.e0 
     465            IF(  REAL( nday, wp ) / REAL( nmonth_len(nmonth), wp ) .GT. 0.5 ) ztmp  = 1.0 
    461466         ELSE 
    462467            ztmp  = 0.e0 
     
    468473         ENDIF 
    469474 
    470          sdjf%nrec_a(:) = (/ irec, nmonth_half(irec) + nsec1jan000 /)   ! define after  record number and time 
    471          irec = irec - 1                                                ! move back to previous record 
    472          sdjf%nrec_b(:) = (/ irec, nmonth_half(irec) + nsec1jan000 /)   ! define before record number and time 
     475         IF( sdjf%cltype == 'monthly' ) THEN 
     476 
     477            sdjf%nrec_b(:) = (/ 0, nmonth_half(irec - 1 ) + nsec1jan000 /) 
     478            sdjf%nrec_a(:) = (/ 1, nmonth_half(irec     ) + nsec1jan000 /) 
     479 
     480            IF( ztmp  == 1. ) THEN 
     481              sdjf%nrec_b(1) = 1 
     482              sdjf%nrec_a(1) = 2 
     483            ENDIF 
     484 
     485         ELSE 
     486 
     487            sdjf%nrec_a(:) = (/ irec, nmonth_half(irec) + nsec1jan000 /)   ! define after  record number and time 
     488            irec = irec - 1                                                ! move back to previous record 
     489            sdjf%nrec_b(:) = (/ irec, nmonth_half(irec) + nsec1jan000 /)   ! define before record number and time 
     490 
     491         ENDIF 
    473492         ! 
    474493      ELSE                              ! higher frequency mean (in hours) 
     
    558577      ELSE 
    559578         ! build the new filename if climatological data 
    560          IF( sdjf%cltype == 'monthly' )   WRITE(sdjf%clname, '(a,"_m",i2.2)' ) TRIM( sdjf%clrootname ), kmonth   ! add month 
     579         IF( sdjf%cltype == 'monthly' )   WRITE(sdjf%clname, '(a,"_m" ,i2.2)' ) TRIM( sdjf%clrootname ), kmonth   ! add month 
    561580      ENDIF 
    562581      CALL iom_open( sdjf%clname, sdjf%num, ldstop = ldstop, ldiof =  LEN(TRIM(sdjf%wgtname)) > 0 ) 
     
    707726      INTEGER                                 ::   inum          ! temporary logical unit 
    708727      INTEGER                                 ::   id            ! temporary variable id 
     728      INTEGER                                 ::   ipk           ! temporary vertical dimension 
    709729      CHARACTER (len=5)                       ::   aname 
    710730      INTEGER , DIMENSION(3)                  ::   ddims 
     
    871891         ! SA: +3 stencil is a patch to avoid out-of-bound computation in some configuration.  
    872892         ! a more robust solution will be given in next release 
    873          ALLOCATE( ref_wgts(nxt_wgt)%fly_dta(ref_wgts(nxt_wgt)%jpiwgt+3, ref_wgts(nxt_wgt)%jpjwgt+3) ) 
    874          IF( ref_wgts(nxt_wgt)%cyclic ) ALLOCATE( ref_wgts(nxt_wgt)%col2(2,ref_wgts(nxt_wgt)%jpjwgt+3) ) 
     893         ipk =  SIZE(sd%fdta,3) 
     894         ALLOCATE( ref_wgts(nxt_wgt)%fly_dta(ref_wgts(nxt_wgt)%jpiwgt+3, ref_wgts(nxt_wgt)%jpjwgt+3 ,ipk) ) 
     895         IF( ref_wgts(nxt_wgt)%cyclic ) ALLOCATE( ref_wgts(nxt_wgt)%col2(2,ref_wgts(nxt_wgt)%jpjwgt+3,ipk) ) 
    875896 
    876897         nxt_wgt = nxt_wgt + 1 
     
    882903   END SUBROUTINE fld_weight 
    883904 
    884    SUBROUTINE fld_interp(num, clvar, kw, dta, nrec) 
     905   SUBROUTINE fld_interp(num, clvar, kw, kk, dta, nrec) 
    885906      !!--------------------------------------------------------------------- 
    886907      !!                    ***  ROUTINE fld_interp  *** 
     
    891912      !! ** Method  :    
    892913      !!---------------------------------------------------------------------- 
    893       INTEGER,          INTENT(in)                        ::   num                 ! stream number 
    894       CHARACTER(LEN=*), INTENT(in)                        ::   clvar               ! variable name 
    895       INTEGER,          INTENT(in)                        ::   kw                  ! weights number 
    896       REAL(wp),         INTENT(inout), DIMENSION(jpi,jpj) ::   dta                 ! output field on model grid 
    897       INTEGER,          INTENT(in)                        ::   nrec                ! record number to read (ie time slice) 
     914      INTEGER,          INTENT(in)                           ::   num                 ! stream number 
     915      CHARACTER(LEN=*), INTENT(in)                           ::   clvar               ! variable name 
     916      INTEGER,          INTENT(in)                           ::   kw                  ! weights number 
     917      INTEGER,          INTENT(in)                           ::   kk                  ! vertical dimension of kk 
     918      REAL(wp),         INTENT(inout), DIMENSION(jpi,jpj,kk) ::   dta                 ! output field on model grid 
     919      INTEGER,          INTENT(in)                           ::   nrec                ! record number to read (ie time slice) 
    898920      !!  
    899       INTEGER, DIMENSION(2)                               ::   rec1,recn           ! temporary arrays for start and length 
    900       INTEGER                                             ::  jk, jn, jm           ! loop counters 
    901       INTEGER                                             ::  ni, nj               ! lengths 
    902       INTEGER                                             ::  jpimin,jpiwid        ! temporary indices 
    903       INTEGER                                             ::  jpjmin,jpjwid        ! temporary indices 
    904       INTEGER                                             ::  jpi1,jpi2,jpj1,jpj2  ! temporary indices 
     921      INTEGER, DIMENSION(3)                                  ::   rec1,recn           ! temporary arrays for start and length 
     922      INTEGER                                                ::  jk, jn, jm           ! loop counters 
     923      INTEGER                                                ::  ni, nj               ! lengths 
     924      INTEGER                                                ::  jpimin,jpiwid        ! temporary indices 
     925      INTEGER                                                ::  jpjmin,jpjwid        ! temporary indices 
     926      INTEGER                                                ::  jpi1,jpi2,jpj1,jpj2  ! temporary indices 
    905927      !!---------------------------------------------------------------------- 
    906928      ! 
     
    920942      rec1(1) = MAX( jpimin-1, 1 ) 
    921943      rec1(2) = MAX( jpjmin-1, 1 ) 
     944      rec1(3) = 1 
    922945      recn(1) = MIN( jpiwid+2, ref_wgts(kw)%ddims(1)-rec1(1)+1 ) 
    923946      recn(2) = MIN( jpjwid+2, ref_wgts(kw)%ddims(2)-rec1(2)+1 ) 
     947      recn(3) = kk 
    924948 
    925949      !! where we need to read it to 
     
    929953      jpj2 = jpj1 + recn(2) - 1 
    930954 
    931       ref_wgts(kw)%fly_dta(:,:) = 0.0 
    932       CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%fly_dta(jpi1:jpi2,jpj1:jpj2), nrec, rec1, recn) 
     955      ref_wgts(kw)%fly_dta(:,:,:) = 0.0 
     956      SELECT CASE( SIZE(ref_wgts(kw)%fly_dta(jpi1:jpi2,jpj1:jpj2,:),3) ) 
     957      CASE(1) 
     958           CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%fly_dta(jpi1:jpi2,jpj1:jpj2,1), nrec, rec1, recn) 
     959      CASE(jpk)   
     960           CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%fly_dta(jpi1:jpi2,jpj1:jpj2,:), nrec, rec1, recn) 
     961      END SELECT  
    933962 
    934963      !! first four weights common to both bilinear and bicubic 
    935964      !! note that we have to offset by 1 into fly_dta array because of halo 
    936       dta(:,:) = 0.0 
     965      dta(:,:,:) = 0.0 
    937966      DO jk = 1,4 
    938         DO jn = 1, jpj 
    939           DO jm = 1,jpi 
     967        DO jn = 1, nlcj 
     968          DO jm = 1,nlci 
    940969            ni = ref_wgts(kw)%data_jpi(jm,jn,jk) 
    941970            nj = ref_wgts(kw)%data_jpj(jm,jn,jk) 
    942             dta(jm,jn) = dta(jm,jn) + ref_wgts(kw)%data_wgt(jm,jn,jk) * ref_wgts(kw)%fly_dta(ni+1,nj+1) 
     971            dta(jm,jn,:) = dta(jm,jn,:) + ref_wgts(kw)%data_wgt(jm,jn,jk) * ref_wgts(kw)%fly_dta(ni+1,nj+1,jk) 
    943972          END DO 
    944973        END DO 
     
    949978        !! fix up halo points that we couldnt read from file 
    950979        IF( jpi1 == 2 ) THEN 
    951            ref_wgts(kw)%fly_dta(jpi1-1,:) = ref_wgts(kw)%fly_dta(jpi1,:) 
     980           ref_wgts(kw)%fly_dta(jpi1-1,:,:) = ref_wgts(kw)%fly_dta(jpi1,:,:) 
    952981        ENDIF 
    953982        IF( jpi2 + jpimin - 1 == ref_wgts(kw)%ddims(1)+1 ) THEN 
    954            ref_wgts(kw)%fly_dta(jpi2+1,:) = ref_wgts(kw)%fly_dta(jpi2,:) 
     983           ref_wgts(kw)%fly_dta(jpi2+1,:,:) = ref_wgts(kw)%fly_dta(jpi2,:,:) 
    955984        ENDIF 
    956985        IF( jpj1 == 2 ) THEN 
    957            ref_wgts(kw)%fly_dta(:,jpj1-1) = ref_wgts(kw)%fly_dta(:,jpj1) 
     986           ref_wgts(kw)%fly_dta(:,jpj1-1,:) = ref_wgts(kw)%fly_dta(:,jpj1,:) 
    958987        ENDIF 
    959988        IF( jpj2 + jpjmin - 1 == ref_wgts(kw)%ddims(2)+1 .AND. jpj2 .lt. jpjwid+2 ) THEN 
    960            ref_wgts(kw)%fly_dta(:,jpj2+1) = 2.0*ref_wgts(kw)%fly_dta(:,jpj2) - ref_wgts(kw)%fly_dta(:,jpj2-1) 
     989           ref_wgts(kw)%fly_dta(:,jpj2+1,:) = 2.0*ref_wgts(kw)%fly_dta(:,jpj2,:) - ref_wgts(kw)%fly_dta(:,jpj2-1,:) 
    961990        ENDIF 
    962991 
     
    9711000           IF( jpi1 == 2 ) THEN 
    9721001              rec1(1) = ref_wgts(kw)%ddims(1) - 1 
    973               CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2), nrec, rec1, recn) 
    974               ref_wgts(kw)%fly_dta(jpi1-1,jpj1:jpj2) = ref_wgts(kw)%col2(ref_wgts(kw)%offset+1,jpj1:jpj2) 
     1002              SELECT CASE( SIZE( ref_wgts(kw)%col2(:,jpj1:jpj2,:),3) ) 
     1003              CASE(1) 
     1004                   CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2,1), nrec, rec1, recn) 
     1005              CASE(jpk)          
     1006                   CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2,:), nrec, rec1, recn) 
     1007              END SELECT       
     1008              ref_wgts(kw)%fly_dta(jpi1-1,jpj1:jpj2,:) = ref_wgts(kw)%col2(ref_wgts(kw)%offset+1,jpj1:jpj2,:) 
    9751009           ENDIF 
    9761010           IF( jpi2 + jpimin - 1 == ref_wgts(kw)%ddims(1)+1 ) THEN 
    9771011              rec1(1) = 1 
    978               CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2), nrec, rec1, recn) 
    979               ref_wgts(kw)%fly_dta(jpi2+1,jpj1:jpj2) = ref_wgts(kw)%col2(2-ref_wgts(kw)%offset,jpj1:jpj2) 
     1012              SELECT CASE( SIZE( ref_wgts(kw)%col2(:,jpj1:jpj2,:),3) ) 
     1013              CASE(1) 
     1014                   CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2,1), nrec, rec1, recn) 
     1015              CASE(jpk) 
     1016                   CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col2(:,jpj1:jpj2,:), nrec, rec1, recn) 
     1017              END SELECT 
     1018              ref_wgts(kw)%fly_dta(jpi2+1,jpj1:jpj2,:) = ref_wgts(kw)%col2(2-ref_wgts(kw)%offset,jpj1:jpj2,:) 
    9801019           ENDIF 
    9811020        ENDIF 
     
    9831022        ! gradient in the i direction 
    9841023        DO jk = 1,4 
    985           DO jn = 1, jpj 
    986             DO jm = 1,jpi 
     1024          DO jn = 1, nlcj 
     1025            DO jm = 1,nlci 
    9871026              ni = ref_wgts(kw)%data_jpi(jm,jn,jk) 
    9881027              nj = ref_wgts(kw)%data_jpj(jm,jn,jk) 
    989               dta(jm,jn) = dta(jm,jn) + ref_wgts(kw)%data_wgt(jm,jn,jk+4) * 0.5 *         & 
    990                                (ref_wgts(kw)%fly_dta(ni+2,nj+1) - ref_wgts(kw)%fly_dta(ni,nj+1)) 
     1028              dta(jm,jn,:) = dta(jm,jn,:) + ref_wgts(kw)%data_wgt(jm,jn,jk+4) * 0.5 *         & 
     1029                               (ref_wgts(kw)%fly_dta(ni+2,nj+1,:) - ref_wgts(kw)%fly_dta(ni,nj+1,:)) 
    9911030            END DO 
    9921031          END DO 
     
    9951034        ! gradient in the j direction 
    9961035        DO jk = 1,4 
    997           DO jn = 1, jpj 
    998             DO jm = 1,jpi 
     1036          DO jn = 1, nlcj 
     1037            DO jm = 1,nlci 
    9991038              ni = ref_wgts(kw)%data_jpi(jm,jn,jk) 
    10001039              nj = ref_wgts(kw)%data_jpj(jm,jn,jk) 
    1001               dta(jm,jn) = dta(jm,jn) + ref_wgts(kw)%data_wgt(jm,jn,jk+8) * 0.5 *         & 
    1002                                (ref_wgts(kw)%fly_dta(ni+1,nj+2) - ref_wgts(kw)%fly_dta(ni+1,nj)) 
     1040              dta(jm,jn,:) = dta(jm,jn,:) + ref_wgts(kw)%data_wgt(jm,jn,jk+8) * 0.5 *         & 
     1041                               (ref_wgts(kw)%fly_dta(ni+1,nj+2,:) - ref_wgts(kw)%fly_dta(ni+1,nj,:)) 
    10031042            END DO 
    10041043          END DO 
     
    10111050              ni = ref_wgts(kw)%data_jpi(jm,jn,jk) 
    10121051              nj = ref_wgts(kw)%data_jpj(jm,jn,jk) 
    1013               dta(jm,jn) = dta(jm,jn) + ref_wgts(kw)%data_wgt(jm,jn,jk+12) * 0.25 * ( & 
    1014                                (ref_wgts(kw)%fly_dta(ni+2,nj+2) - ref_wgts(kw)%fly_dta(ni  ,nj+2)) -   & 
    1015                                (ref_wgts(kw)%fly_dta(ni+2,nj  ) - ref_wgts(kw)%fly_dta(ni  ,nj  ))) 
     1052              dta(jm,jn,:) = dta(jm,jn,:) + ref_wgts(kw)%data_wgt(jm,jn,jk+12) * 0.25 * ( & 
     1053                               (ref_wgts(kw)%fly_dta(ni+2,nj+2,:) - ref_wgts(kw)%fly_dta(ni  ,nj+2,:)) -   & 
     1054                               (ref_wgts(kw)%fly_dta(ni+2,nj  ,:) - ref_wgts(kw)%fly_dta(ni  ,nj  ,:))) 
    10161055            END DO 
    10171056          END DO 
Note: See TracChangeset for help on using the changeset viewer.