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 2125 for branches – NEMO

Changeset 2125 for branches


Ignore:
Timestamp:
2010-09-27T12:22:04+02:00 (14 years ago)
Author:
cbricaud
Message:

modification: don't allocate fdta arrays when time-interpollation is not used

Location:
branches/DEV_r1784_3DF/NEMO/OPA_SRC
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/DIA/diawri.F90

    r1756 r2125  
    3030   USE limwri_2  
    3131#endif 
     32   USE dtatem 
     33   USE dtasal 
     34 
    3235   IMPLICIT NONE 
    3336   PRIVATE 
     
    489492 
    490493      ! Write fields on T grid 
    491       CALL histwrite( nid_T, "votemper", it, tn            , ndim_T , ndex_T  )   ! temperature 
    492       CALL histwrite( nid_T, "vosaline", it, sn            , ndim_T , ndex_T  )   ! salinity 
     494      CALL histwrite( nid_T, "votemper", it, t_dta            , ndim_T , ndex_T  )   ! temperature 
     495      CALL histwrite( nid_T, "vosaline", it, s_dta            , ndim_T , ndex_T  )   ! salinity 
    493496      CALL histwrite( nid_T, "sosstsst", it, tn(:,:,1)     , ndim_hT, ndex_hT )   ! sea surface temperature 
    494497      CALL histwrite( nid_T, "sosaline", it, sn(:,:,1)     , ndim_hT, ndex_hT )   ! sea surface salinity 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/DTA/dtasal.F90

    r2051 r2125  
    114114             CALL ctl_stop( 'dta_sal: unable to allocate sf_sal structure' )   ;   RETURN 
    115115         ENDIF 
    116          ALLOCATE( sf_sal(1)%fnow(jpi,jpj,jpk) ) 
    117          ALLOCATE( sf_sal(1)%fdta(jpi,jpj,jpk,2) ) 
    118  
     116 
     117#if defined key_orca_lev10 
     118         ALLOCATE( sf_sal(1)%fnow(jpi,jpj,jpkdta)   ) 
     119         IF( sn_sal%ln_tint ) ALLOCATE( sf_sal(1)%fdta(jpi,jpj,jpkdta,2) ) 
     120#else 
     121         ALLOCATE( sf_sal(1)%fnow(jpi,jpj,jpk)   ) 
     122         IF( sn_sal%ln_tint ) ALLOCATE( sf_sal(1)%fdta(jpi,jpj,jpk,2) ) 
     123#endif 
    119124         ! fill sf_sal with sn_sal and control print 
    120125         CALL fld_fill( sf_sal, (/ sn_sal /), cn_dir, 'dta_sal', 'Salinity data', 'namdta_sal' ) 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/DTA/dtatem.F90

    r2051 r2125  
    122122#if defined key_orca_lev10 
    123123         ALLOCATE( sf_tem(1)%fnow(jpi,jpj,jpkdta)   ) 
    124          ALLOCATE( sf_tem(1)%fdta(jpi,jpj,jpkdta,2) ) 
     124         IF( sn_tem%ln_tint ) ALLOCATE( sf_tem(1)%fdta(jpi,jpj,jpkdta,2) ) 
    125125#else 
    126126         ALLOCATE( sf_tem(1)%fnow(jpi,jpj,jpk)   ) 
    127          ALLOCATE( sf_tem(1)%fdta(jpi,jpj,jpk,2) ) 
     127         IF( sn_tem%ln_tint ) ALLOCATE( sf_tem(1)%fdta(jpi,jpj,jpk,2) ) 
    128128#endif 
    129129         ! fill sf_tem with sn_tem and control print 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/fldread.F90

    r2051 r2125  
    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 
     
    146146!CDIR COLLAPSE 
    147147               sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) 
    148                sd(jf)%rotn(1)       = sd(jf)%rotn(2) 
     148               sd(jf)%rotn(1)     = sd(jf)%rotn(2) 
    149149            ENDIF 
    150150 
     
    209209            IF( LEN(TRIM(sd(jf)%wgtname)) > 0 ) THEN 
    210210               CALL wgt_list( sd(jf), kw ) 
    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) ) 
     211               ipk = SIZE(sd(jf)%fnow,3) 
     212               IF( sd(jf)%ln_tint ) THEN 
     213                  CALL fld_interp( sd(jf)%num, sd(jf)%clvar , kw , ipk, sd(jf)%fdta(:,:,:,2) , sd(jf)%nrec_a(1) ) 
     214               ELSE 
     215                  CALL fld_interp( sd(jf)%num, sd(jf)%clvar , kw , ipk, sd(jf)%fnow(:,:,:)   , sd(jf)%nrec_a(1) ) 
     216               ENDIF 
    213217            ELSE 
    214                SELECT CASE( SIZE(sd(jf)%fdta,3) ) 
    215                CASE(1) 
    216                   CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,1,2), sd(jf)%nrec_a(1) ) 
     218               SELECT CASE( SIZE(sd(jf)%fnow,3) ) 
     219               CASE(1)    
     220                  IF( sd(jf)%ln_tint ) THEN 
     221                     CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,1,2), sd(jf)%nrec_a(1) ) 
     222                  ELSE 
     223                     CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fnow(:,:,1)  , sd(jf)%nrec_a(1) ) 
     224                  ENDIF  
    217225               CASE(jpk) 
    218                   CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,:,2), sd(jf)%nrec_a(1) ) 
     226                  IF( sd(jf)%ln_tint ) THEN 
     227                     CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,:,2), sd(jf)%nrec_a(1) ) 
     228                  ELSE 
     229                     CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fnow(:,:,:)  , sd(jf)%nrec_a(1) ) 
     230                  ENDIF  
    219231               END SELECT 
    220232            ENDIF 
     
    251263                IF( kf > 0 ) THEN 
    252264                   !! fields jf,kf are two components which need to be rotated together 
    253                    DO nf = 1,2 
     265                   IF( sd(jf)%ln_tint )THEN 
     266                      DO nf = 1,2 
     267                         !! check each time level of this pair 
     268                         IF( .NOT. sd(jf)%rotn(nf) .AND. .NOT. sd(kf)%rotn(nf) ) THEN 
     269                            utmp(:,:) = 0.0 
     270                            vtmp(:,:) = 0.0 
     271                            ! 
     272                            ipk = SIZE( sd(kf)%fnow(:,:,:) ,3 ) 
     273                            DO jk = 1,ipk 
     274                               CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->i', utmp(:,:) ) 
     275                               CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->j', vtmp(:,:) ) 
     276                               sd(jf)%fdta(:,:,jk,nf) = utmp(:,:) 
     277                               sd(kf)%fdta(:,:,jk,nf) = vtmp(:,:) 
     278                            ENDDO 
     279                            ! 
     280                            sd(jf)%rotn(nf) = .TRUE. 
     281                            sd(kf)%rotn(nf) = .TRUE. 
     282                            IF( lwp .AND. kt == nit000 ) & 
     283                                      WRITE(numout,*) 'fld_read: vector pair (',  & 
     284                                                      TRIM(sd(jf)%clvar),',',TRIM(sd(kf)%clvar), & 
     285                                                      ') rotated on to model grid' 
     286                         ENDIF 
     287                      END DO 
     288                   ELSE  
    254289                      !! check each time level of this pair 
    255290                      IF( .NOT. sd(jf)%rotn(nf) .AND. .NOT. sd(kf)%rotn(nf) ) THEN 
     
    257292                         vtmp(:,:) = 0.0 
    258293                         ! 
    259                          ipk = SIZE( sd(kf)%fdta(:,:,:,nf) ,3 ) 
     294                         ipk = SIZE( sd(kf)%fnow(:,:,:) ,3 ) 
    260295                         DO jk = 1,ipk 
    261                             CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->i', utmp(:,:) ) 
    262                             CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->j', vtmp(:,:) ) 
    263                             sd(jf)%fdta(:,:,jk,nf) = utmp(:,:) 
    264                             sd(kf)%fdta(:,:,jk,nf) = vtmp(:,:) 
    265                          END DO 
     296                            CALL rot_rep( sd(jf)%fnow(:,:,jk),sd(kf)%fnow(:,:,jk),'T', 'en->i', utmp(:,:) ) 
     297                            CALL rot_rep( sd(jf)%fnow(:,:,jk),sd(kf)%fnow(:,:,jk),'T', 'en->j', vtmp(:,:) ) 
     298                            sd(jf)%fnow(:,:,jk) = utmp(:,:) 
     299                            sd(kf)%fnow(:,:,jk) = vtmp(:,:) 
     300                         ENDDO 
    266301                         ! 
    267302                         sd(jf)%rotn(nf) = .TRUE. 
     
    272307                                                   ') rotated on to model grid' 
    273308                      ENDIF 
    274                    END DO 
     309                   ENDIF 
    275310                ENDIF 
    276311             ENDIF 
     
    304339               ENDIF 
    305340!CDIR COLLAPSE 
    306                sd(jf)%fnow(:,:,:) = sd(jf)%fdta(:,:,:,2)   ! piecewise constant field 
    307   
    308341            ENDIF 
    309342            ! 
     
    405438         IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
    406439            CALL wgt_list( sdjf, kwgt ) 
    407             ipk = SIZE(sdjf%fdta,3) 
    408             CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, ipk, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1) ) 
     440            ipk = SIZE(sdjf%fnow,3) 
     441            IF( sdjf%ln_tint ) THEN 
     442               CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, ipk, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1) ) 
     443            ELSE 
     444               CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, ipk, sdjf%fnow(:,:,:)  , sdjf%nrec_a(1) ) 
     445            ENDIF 
    409446         ELSE 
    410             SELECT CASE ( SIZE(sdjf%fdta,3) ) 
     447            write(narea+200,*)' sdjf%ln_tint SIZE(sdjf%fnow,3) ',sdjf%ln_tint,SIZE(sdjf%fnow,3) ; call flush(narea+200) 
     448            write(narea+200,*)' SIZE(sdjf%fdta,3)  SIZE(sdjf%fdta,4) ',SIZE(sdjf%fdta,3),SIZE(sdjf%fdta,4)  ; call flush(narea+200) 
     449            SELECT CASE( SIZE(sdjf%fnow,3) ) 
    411450            CASE(1) 
    412                 CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_b(1) ) 
     451               IF( sdjf%ln_tint ) THEN 
     452                  CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_b(1) ) 
     453               ELSE 
     454                  CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fnow(:,:,1)  , sdjf%nrec_b(1) ) 
     455               ENDIF 
    413456            CASE(jpk) 
    414                 CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 
     457               IF( sdjf%ln_tint ) THEN 
     458                  CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 
     459               ELSE 
     460                  CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fnow(:,:,:)  , sdjf%nrec_b(1) ) 
     461               ENDIF 
    415462            END SELECT 
     463            write(narea+200,*)' test1 ok ' ; call flush(narea+200) 
    416464         ENDIF 
    417465         sdjf%rotn(2) = .FALSE. 
     
    629677               &                          ' pairing    : '    , TRIM( sdf(jf)%vcomp      ),   & 
    630678               &                          ' data type: '      ,       sdf(jf)%cltype 
     679            call flush(numout) 
    631680         END DO 
    632681      ENDIF 
     
    891940         ! SA: +3 stencil is a patch to avoid out-of-bound computation in some configuration.  
    892941         ! a more robust solution will be given in next release 
    893          ipk =  SIZE(sd%fdta,3) 
     942         ipk =  SIZE(sd%fnow,3) 
    894943         ALLOCATE( ref_wgts(nxt_wgt)%fly_dta(ref_wgts(nxt_wgt)%jpiwgt+3, ref_wgts(nxt_wgt)%jpjwgt+3 ,ipk) ) 
    895944         IF( ref_wgts(nxt_wgt)%cyclic ) ALLOCATE( ref_wgts(nxt_wgt)%col2(2,ref_wgts(nxt_wgt)%jpjwgt+3,ipk) ) 
     
    912961      !! ** Method  :    
    913962      !!---------------------------------------------------------------------- 
    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) 
     963      INTEGER,          INTENT(in)                        ::   num                 ! stream number 
     964      CHARACTER(LEN=*), INTENT(in)                        ::   clvar               ! variable name 
     965      INTEGER,          INTENT(in)                        ::   kw                  ! weights number 
     966      INTEGER,          INTENT(in)                        ::   kk                  ! vertical dimension of kk 
     967      REAL(wp),         INTENT(inout), DIMENSION(jpi,jpj,kk) ::   dta              ! output field on model grid 
     968      INTEGER,          INTENT(in)                        ::   nrec                ! record number to read (ie time slice) 
    920969      !!  
    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 
     970      INTEGER, DIMENSION(3)                               ::   rec1,recn           ! temporary arrays for start and length 
     971      INTEGER                                             ::  jk, jn, jm           ! loop counters 
     972      INTEGER                                             ::  ni, nj               ! lengths 
     973      INTEGER                                             ::  jpimin,jpiwid        ! temporary indices 
     974      INTEGER                                             ::  jpjmin,jpjwid        ! temporary indices 
     975      INTEGER                                             ::  jpi1,jpi2,jpj1,jpj2  ! temporary indices 
    927976      !!---------------------------------------------------------------------- 
    928977      ! 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcblk_clio.F90

    r2051 r2125  
    129129         &                          sn_ccov, sn_tair, sn_prec 
    130130      !!--------------------------------------------------------------------- 
     131      write(narea+200,*)'clio : '; call flush(narea+200) 
    131132 
    132133      !                                         ! ====================== ! 
     
    160161            CALL ctl_stop( 'sbc_blk_clio: unable to allocate sf structure' )   ;   RETURN 
    161162         ENDIF 
    162  
    163163         DO ifpr= 1, jpfld 
    164164            ALLOCATE( sf(ifpr)%fnow(jpi,jpj,1) ) 
    165             ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) ) 
    166          END DO 
    167  
    168  
     165            IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) ) 
     166         END DO 
    169167         ! fill sf with slf_i and control print 
    170168         CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_clio', 'flux formulation for ocean surface boundary condition', 'namsbc_clio' ) 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r2051 r2125  
    165165         DO ifpr= 1, jfld 
    166166            ALLOCATE( sf(ifpr)%fnow(jpi,jpj,1) ) 
    167             ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) ) 
     167            IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) ) 
    168168         END DO 
    169169         ! 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcflx.F90

    r2051 r2125  
    127127         DO ji= 1, jpfld 
    128128            ALLOCATE( sf(ji)%fnow(jpi,jpj,1) ) 
    129             ALLOCATE( sf(ji)%fdta(jpi,jpj,1,2) ) 
     129            IF( slf_i(ji)%ln_tint ) ALLOCATE( sf(ji)%fdta(jpi,jpj,1,2) ) 
    130130         END DO 
    131131 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcice_if.F90

    r2051 r2125  
    8282         ENDIF 
    8383         ALLOCATE( sf_ice(1)%fnow(jpi,jpj,1) ) 
    84          ALLOCATE( sf_ice(1)%fdta(jpi,jpj,1,2) ) 
     84         IF( sn_ice%ln_tint ) ALLOCATE( sf_ice(1)%fdta(jpi,jpj,1,2) ) 
    8585 
    8686 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r2051 r2125  
    7575               CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' )   ;   RETURN 
    7676            ENDIF 
     77         ENDIF 
     78         CALL sbc_rnf_init(sf_rnf) 
     79         IF( .NOT. ln_rnf_emp ) THEN 
    7780            ALLOCATE( sf_rnf(1)%fnow(jpi,jpj,1) ) 
    78             ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,1,2) ) 
    79          ENDIF 
    80          CALL sbc_rnf_init(sf_rnf) 
     81            IF( sf_rnf(1)%ln_tint ) ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,1,2) ) 
     82         ENDIF 
    8183      ENDIF 
    8284 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/SBC/sbcssr.F90

    r2051 r2125  
    116116            ENDIF 
    117117            ALLOCATE( sf_sst(1)%fnow(jpi,jpj,1) ) 
    118             ALLOCATE( sf_sst(1)%fdta(jpi,jpj,1,2) ) 
    119118            ! 
    120119            ! fill sf_sst with sn_sst and control print 
    121120            CALL fld_fill( sf_sst, (/ sn_sst /), cn_dir, 'sbc_ssr', 'SST restoring term toward SST data', 'namsbc_ssr' ) 
     121            IF( sf_sst(1)%ln_tint ) ALLOCATE( sf_sst(1)%fdta(jpi,jpj,1,2) ) 
    122122         ENDIF 
    123123         ! 
     
    129129            ENDIF 
    130130            ALLOCATE( sf_sss(1)%fnow(jpi,jpj,1) ) 
    131             ALLOCATE( sf_sss(1)%fdta(jpi,jpj,1,2) ) 
    132131            ! 
    133132            ! fill sf_sss with sn_sss and control print 
    134133            CALL fld_fill( sf_sss, (/ sn_sss /), cn_dir, 'sbc_ssr', 'SSS restoring term toward SSS data', 'namsbc_ssr' ) 
     134            IF( sf_sss(1)%ln_tint )ALLOCATE( sf_sss(1)%fdta(jpi,jpj,1,2) ) 
    135135         ENDIF 
    136136         ! 
  • branches/DEV_r1784_3DF/NEMO/OPA_SRC/TRA/traqsr.F90

    r1806 r2125  
    335335               ENDIF 
    336336               ALLOCATE( sf_chl(1)%fnow(jpi,jpj,1)   ) 
    337                ALLOCATE( sf_chl(1)%fdta(jpi,jpj,1,2) ) 
     337               IF( sn_chl%ln_tint )ALLOCATE( sf_chl(1)%fdta(jpi,jpj,1,2) ) 
    338338               !                                        ! fill sf_chl with sn_chl and control print 
    339339               CALL fld_fill( sf_chl, (/ sn_chl /), cn_dir, 'tra_qsr_init',   & 
Note: See TracChangeset for help on using the changeset viewer.