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 5612 for branches/UKMO/dev_r5518_CICE_coupling_GSI7/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90 – NEMO

Ignore:
Timestamp:
2015-07-20T11:11:11+02:00 (9 years ago)
Author:
dancopsey
Message:

Merged with revision 5518 of the trunk (NEMO3.6_stable).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_CICE_coupling_GSI7/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90

    r5234 r5612  
    6969   END TYPE FLD 
    7070 
    71    TYPE, PUBLIC ::   MAP_POINTER      !: Array of integer pointers to 1D arrays 
    72       INTEGER, POINTER   ::  ptr(:) 
     71   TYPE, PUBLIC ::   MAP_POINTER      !: Map from input data file to local domain 
     72      INTEGER, POINTER, DIMENSION(:)  ::  ptr           ! Array of integer pointers to 1D arrays 
     73      LOGICAL                         ::  ll_unstruc    ! Unstructured (T) or structured (F) boundary data file 
    7374   END TYPE MAP_POINTER 
    7475 
     
    153154      IF( PRESENT(kit) )   ll_firstcall = ll_firstcall .and. kit == 1 
    154155 
    155       it_offset = 0 
     156      IF ( nn_components == jp_iam_sas ) THEN   ;   it_offset = nn_fsbc 
     157      ELSE                                      ;   it_offset = 0 
     158      ENDIF 
    156159      IF( PRESENT(kt_offset) )   it_offset = kt_offset 
    157160 
     
    451454      ENDIF 
    452455      ! 
    453       it_offset = 0 
     456      IF ( nn_components == jp_iam_sas ) THEN   ;   it_offset = nn_fsbc 
     457      ELSE                                      ;   it_offset = 0 
     458      ENDIF 
    454459      IF( PRESENT(kt_offset) )   it_offset = kt_offset 
    455460      IF( PRESENT(kit) ) THEN   ;   it_offset = ( kit + it_offset ) * NINT( rdt/REAL(nn_baro,wp) ) 
     
    601606      ! 
    602607      IF( ASSOCIATED(map%ptr) ) THEN 
    603          IF( sdjf%ln_tint ) THEN   ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1), map%ptr ) 
    604          ELSE                      ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fnow(:,:,:  ), sdjf%nrec_a(1), map%ptr ) 
     608         IF( sdjf%ln_tint ) THEN   ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1), map ) 
     609         ELSE                      ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fnow(:,:,:  ), sdjf%nrec_a(1), map ) 
    605610         ENDIF 
    606611      ELSE IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
     
    672677      REAL(wp), DIMENSION(:,:,:), INTENT(out) ::   dta   ! output field on model grid (2 dimensional) 
    673678      INTEGER                   , INTENT(in ) ::   nrec    ! record number to read (ie time slice) 
    674       INTEGER,  DIMENSION(:)    , INTENT(in ) ::   map     ! global-to-local mapping indices 
     679      TYPE(MAP_POINTER)         , INTENT(in ) ::   map     ! global-to-local mapping indices 
    675680      !! 
    676681      INTEGER                                 ::   ipi      ! length of boundary data on local process 
     
    693698#if defined key_bdy 
    694699      ipj = iom_file(num)%dimsz(2,idvar) 
    695       IF (ipj == 1) THEN ! we assume that this is a structured open boundary file 
     700      IF ( map%ll_unstruc) THEN ! unstructured open boundary data file 
    696701         dta_read => dta_global 
    697       ELSE 
     702      ELSE                      ! structured open boundary data file 
    698703         dta_read => dta_global2 
    699704      ENDIF 
     
    708713      END SELECT 
    709714      ! 
    710       IF (ipj==1) THEN 
     715      IF ( map%ll_unstruc ) THEN ! unstructured open boundary data file 
    711716         DO ib = 1, ipi 
    712717            DO ik = 1, ipk 
    713                dta(ib,1,ik) =  dta_read(map(ib),1,ik) 
     718               dta(ib,1,ik) =  dta_read(map%ptr(ib),1,ik) 
    714719            END DO 
    715720         END DO 
    716       ELSE ! we assume that this is a structured open boundary file 
     721      ELSE                       ! structured open boundary data file 
    717722         DO ib = 1, ipi 
    718             jj=1+floor(REAL(map(ib)-1)/REAL(ilendta)) 
    719             ji=map(ib)-(jj-1)*ilendta 
     723            jj=1+floor(REAL(map%ptr(ib)-1)/REAL(ilendta)) 
     724            ji=map%ptr(ib)-(jj-1)*ilendta 
    720725            DO ik = 1, ipk 
    721726               dta(ib,1,ik) =  dta_read(ji,jj,ik) 
     
    10201025      INTEGER                           ::   ipk           ! temporary vertical dimension 
    10211026      CHARACTER (len=5)                 ::   aname 
    1022       INTEGER , DIMENSION(3)            ::   ddims 
     1027      INTEGER , DIMENSION(:), ALLOCATABLE ::   ddims 
    10231028      INTEGER , POINTER, DIMENSION(:,:) ::   data_src 
    10241029      REAL(wp), POINTER, DIMENSION(:,:) ::   data_tmp 
     
    10431048 
    10441049      !! get dimensions 
     1050      IF ( SIZE(sd%fnow, 3) > 1 ) THEN 
     1051         ALLOCATE( ddims(4) ) 
     1052      ELSE 
     1053         ALLOCATE( ddims(3) ) 
     1054      ENDIF 
    10451055      id = iom_varid( inum, sd%clvar, ddims ) 
    10461056 
     
    11391149         CALL ctl_stop( '    fld_weight : unable to read the file ' ) 
    11401150      ENDIF 
     1151 
     1152      DEALLOCATE (ddims ) 
    11411153 
    11421154      CALL wrk_dealloc( jpi,jpj, data_src )   ! integer 
Note: See TracChangeset for help on using the changeset viewer.