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

Ignore:
Timestamp:
2010-02-24T17:40:02+01:00 (14 years ago)
Author:
cbricaud
Message:

developement that is running with running with nemoref on 19022010

File:
1 edited

Legend:

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

    r1730 r1806  
    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 
    51       REAL(wp) , ALLOCATABLE, DIMENSION(:,:,:) ::   fdta         ! 2 consecutive record of input fields 
     50      REAL(wp) , ALLOCATABLE, DIMENSION(:,:,:)   ::   fnow       ! input fields interpolated to now time step 
     51      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 
    5353                                                        ! into the WGTLIST structure 
     
    120120 
    121121      INTEGER  ::   jf         ! dummy indices 
     122      INTEGER  ::   jk         ! dummy indices 
     123      INTEGER  ::   ipk        ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
    122124      INTEGER  ::   kw         ! index into wgts array 
    123125      INTEGER  ::   ireclast   ! last record to be read in the current year file 
     
    143145            IF( sd(jf)%ln_tint ) THEN         ! time interpolation: swap before record field 
    144146!CDIR COLLAPSE 
    145                sd(jf)%fdta(:,:,1) = sd(jf)%fdta(:,:,2) 
     147               sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) 
    146148               sd(jf)%rotn(1)     = sd(jf)%rotn(2) 
    147149            ENDIF 
     
    204206            IF( LEN(TRIM(sd(jf)%wgtname)) > 0 ) THEN 
    205207               CALL wgt_list( sd(jf), kw ) 
    206                CALL fld_interp( sd(jf)%num, sd(jf)%clvar, kw, sd(jf)%fdta(:,:,2), sd(jf)%nrec_a(1) ) 
     208               ipk = SIZE(sd(jf)%fdta,3) 
     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               ENDDO 
    207212            ELSE 
    208                CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,2), sd(jf)%nrec_a(1) ) 
     213               SELECT CASE( SIZE(sd(jf)%fdta,3) ) 
     214               CASE(1) 
     215                  CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,1,2), sd(jf)%nrec_a(1) ) 
     216               CASE(jpk) 
     217                  CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,:,2), sd(jf)%nrec_a(1) ) 
     218               END SELECT 
    209219            ENDIF 
    210220            sd(jf)%rotn(2) = .FALSE. 
     
    245255                         utmp(:,:) = 0.0 
    246256                         vtmp(:,:) = 0.0 
    247                          CALL rot_rep( sd(jf)%fdta(:,:,nf), sd(kf)%fdta(:,:,nf), 'T', 'en->i', utmp(:,:) ) 
    248                          CALL rot_rep( sd(jf)%fdta(:,:,nf), sd(kf)%fdta(:,:,nf), 'T', 'en->j', vtmp(:,:) ) 
    249                          sd(jf)%fdta(:,:,nf) = utmp(:,:) 
    250                          sd(kf)%fdta(:,:,nf) = vtmp(:,:) 
     257                         ! 
     258                         ipk = SIZE( sd(kf)%fdta(:,:,:,nf) ,3 ) 
     259                         DO jk = 1,ipk 
     260                            CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->i', utmp(:,:) ) 
     261                            CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->j', vtmp(:,:) ) 
     262                            sd(jf)%fdta(:,:,jk,nf) = utmp(:,:) 
     263                            sd(kf)%fdta(:,:,jk,nf) = vtmp(:,:) 
     264                         ENDDO 
     265                         ! 
    251266                         sd(jf)%rotn(nf) = .TRUE. 
    252267                         sd(kf)%rotn(nf) = .TRUE. 
     
    280295               ztintb =  1. - ztinta 
    281296!CDIR COLLAPSE 
    282                sd(jf)%fnow(:,:) = ztintb * sd(jf)%fdta(:,:,1) + ztinta * sd(jf)%fdta(:,:,2) 
     297               sd(jf)%fnow(:,:,:) = ztintb * sd(jf)%fdta(:,:,:,1) + ztinta * sd(jf)%fdta(:,:,:,2) 
    283298            ELSE 
    284299               IF(lwp .AND. kt - nit000 <= 100 ) THEN 
     
    288303               ENDIF 
    289304!CDIR COLLAPSE 
    290                sd(jf)%fnow(:,:) = sd(jf)%fdta(:,:,2)   ! piecewise constant field 
     305               sd(jf)%fnow(:,:,:) = sd(jf)%fdta(:,:,:,2)   ! piecewise constant field 
    291306  
    292307            ENDIF 
     
    320335      INTEGER :: inrec          ! number of record existing for this variable 
    321336      INTEGER :: kwgt 
     337      INTEGER :: jk             !vertical loop variable 
     338      INTEGER :: ipk            !number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
    322339      CHARACTER(LEN=1000) ::   clfmt   ! write format 
    323340      !!--------------------------------------------------------------------- 
     
    386403         IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
    387404            CALL wgt_list( sdjf, kwgt ) 
    388             CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, sdjf%fdta(:,:,2), sdjf%nrec_b(1) ) 
     405            ipk = SIZE(sdjf%fdta,3) 
     406            DO jk = 1,ipk 
     407               CALL fld_interp( sdjf%num,sdjf%clvar,kwgt,sdjf%fdta(:,:,jk,2),sdjf%nrec_a(1) ) 
     408            ENDDO 
    389409         ELSE 
    390             CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,2), sdjf%nrec_b(1) ) 
     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                if(lwp)write(numout,*)'cbr00 ',sdjf%num,SIZE(sdjf%fdta,3)  
     415                CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 
     416            END SELECT 
    391417         ENDIF 
    392418         sdjf%rotn(2) = .FALSE. 
Note: See TracChangeset for help on using the changeset viewer.