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 3000 for branches/dev_2802_OBStools/NEMOGCM/TOOLS/OBSTOOLS/src/fbcomb.F90 – NEMO

Ignore:
Timestamp:
2011-10-26T15:44:20+02:00 (13 years ago)
Author:
djlea
Message:

Updated obstools. Addition of headers to programs which explain what each utility does and how to run it. All the programs now build using the naketools utility.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_2802_OBStools/NEMOGCM/TOOLS/OBSTOOLS/src/fbcomb.F90

    r2945 r3000  
    11PROGRAM fbcomb 
     2   !!--------------------------------------------------------------------- 
     3   !! 
     4   !!                     ** PROGRAM fbcomb ** 
     5   !! 
     6   !!  ** Purpose : Combine MPI decomposed feedback files into one file 
     7   !! 
     8   !!  ** Method  : Use of utilities from obs_fbm. 
     9   !! 
     10   !!  ** Action  :  
     11   !! 
     12   !!   Usage: 
     13   !!     fbcomb.exe outputfile inputfile1 inputfile2 ... 
     14   !! 
     15   !!   History : 
     16   !!        ! 2010 (K. Mogensen) Initial version 
     17   !!---------------------------------------------------------------------- 
    218   USE toolspar_kind 
    319   USE obs_fbm 
     
    2339   REAL(KIND=dp),ALLOCATABLE :: zsort(:,:) 
    2440   INTEGER,ALLOCATABLE  :: iset(:),inum(:),iindex(:) 
     41   INTEGER :: iwmo 
    2542   ! 
    2643   ! Output data 
     
    3047   ! Loop variables 
    3148   ! 
    32    INTEGER :: ia,iv,ii,ij, ist 
     49   INTEGER :: ia,iv,ii,ij 
    3350   ! 
    3451   ! Get number of command line arguments 
     
    4865   ntotobs = 0 
    4966   ninfiles = nargs - 1 
    50    ist=-1 
    5167   DO ia=1, ninfiles 
    5268      CALL getarg( ia+1, cdinfile(ia) ) 
     
    5571      WRITE(*,'(2A)')'File = ', TRIM(cdinfile(ia)) 
    5672      WRITE(*,'(A,I9,A)')'has', obsdata(ia)%nobs, ' observations' 
    57       IF (obsdata(ia)%nobs > 0 .AND. ist < 0) ist=ia             ! find first file with obs in 
    5873      ntotobs = ntotobs + obsdata(ia)%nobs 
    5974   ENDDO 
     
    6277   ! Check that the data is confirming 
    6378   ! 
    64    DO ia=ist+1, ninfiles 
    65       IF ( obsdata(ia)%cdjuldref /= obsdata(ist)%cdjuldref ) THEN 
     79   DO ia=2, ninfiles 
     80      IF ( obsdata(ia)%cdjuldref /= obsdata(1)%cdjuldref ) THEN 
    6681         WRITE(*,*)'Different julian date reference. Aborting' 
    6782         CALL abort 
    6883      ENDIF 
    69       IF ( obsdata(ia)%nvar /= obsdata(ist)%nvar ) THEN 
     84      IF ( obsdata(ia)%nvar /= obsdata(1)%nvar ) THEN 
    7085         WRITE(*,*)'Different number of variables. Aborting' 
    7186         CALL abort 
    7287      ENDIF 
    73       IF  (obsdata(ia)%nadd /= obsdata(ist)%nadd ) THEN 
     88      IF  (obsdata(ia)%nadd /= obsdata(1)%nadd ) THEN 
    7489         WRITE(*,*)'Different number of additional entries. Aborting' 
    7590         CALL abort 
    7691      ENDIF 
    77       IF ( obsdata(ia)%next /= obsdata(ist)%next ) THEN 
     92      IF ( obsdata(ia)%next /= obsdata(1)%next ) THEN 
    7893         WRITE(*,*)'Different number of additional variables. Aborting' 
    7994         CALL abort 
    8095      ENDIF 
    81       IF ( obsdata(ia)%lgrid .NEQV. obsdata(ist)%lgrid ) THEN 
     96      IF ( obsdata(ia)%lgrid .NEQV. obsdata(1)%lgrid ) THEN 
    8297         WRITE(*,*)'Inconsistent grid search info. Aborting' 
    8398         CALL abort 
    8499      ENDIF 
    85100      DO iv=1, obsdata(ia)%nvar 
    86          IF ( obsdata(ia)%cname(iv) /= obsdata(ist)%cname(iv) ) THEN 
     101         IF ( obsdata(ia)%cname(iv) /= obsdata(1)%cname(iv) ) THEN 
    87102            WRITE(*,*)'Variable name ', TRIM(obsdata(ia)%cname(iv)), & 
    88                &      ' is different from ', TRIM(obsdata(ist)%cname(iv)), & 
     103               &      ' is different from ', TRIM(obsdata(1)%cname(iv)), & 
    89104               &      '. Aborting' 
    90105            CALL abort 
    91106         ENDIF 
    92          IF ( obsdata(ist)%lgrid .AND. obsdata(ia)%nobs > 0) THEN 
    93             IF ( obsdata(ia)%cgrid(iv) /= obsdata(ist)%cgrid(iv) ) THEN 
    94                WRITE(*,*)'Grid name ', TRIM(obsdata(ia)%cgrid(iv)), & 
    95                   &      ' is different from ', TRIM(obsdata(ist)%cgrid(iv)), & 
    96                   &      '. Aborting' 
    97                CALL abort 
     107         IF ( obsdata(1)%lgrid ) THEN 
     108            IF ( obsdata(ia)%cgrid(iv) /= obsdata(1)%cgrid(iv) ) THEN 
     109               IF (obsdata(1)%nobs==0) THEN 
     110                  obsdata(1)%cgrid(iv) = obsdata(ia)%cgrid(iv) 
     111               ELSE 
     112                  IF (obsdata(ia)%nobs>0) THEN 
     113                     WRITE(*,*)'Grid name ', TRIM(obsdata(ia)%cgrid(iv)), & 
     114                        &      ' is different from ', & 
     115                        &      TRIM(obsdata(1)%cgrid(iv)), '. Aborting' 
     116                     CALL abort 
     117                  ENDIF 
     118               ENDIF 
    98119            ENDIF 
    99120         ENDIF 
    100121      ENDDO 
    101122      DO iv=1,obsdata(ia)%nadd 
    102          IF ( obsdata(ia)%caddname(iv) /= obsdata(ist)%caddname(iv) ) THEN 
     123         IF ( obsdata(ia)%caddname(iv) /= obsdata(1)%caddname(iv) ) THEN 
    103124            WRITE(*,*)'Additional name ', TRIM(obsdata(ia)%caddname(iv)), & 
    104                &      ' is different from ', TRIM(obsdata(ist)%caddname(iv)), & 
     125               &      ' is different from ', TRIM(obsdata(1)%caddname(iv)), & 
    105126               &      '. Aborting' 
    106127            CALL abort 
     
    108129      ENDDO 
    109130      DO iv=1,obsdata(ia)%next 
    110          IF ( obsdata(ia)%cextname(iv) /= obsdata(ist)%cextname(iv) ) THEN 
     131         IF ( obsdata(ia)%cextname(iv) /= obsdata(1)%cextname(iv) ) THEN 
    111132            WRITE(*,*)'Extra name ', TRIM(obsdata(ia)%cextname(iv)), & 
    112                &      ' is different from ', TRIM(obsdata(ist)%cextname(iv)), & 
     133               &      ' is different from ', TRIM(obsdata(1)%cextname(iv)), & 
    113134               &      '. Aborting' 
    114135            CALL abort 
     
    119140   ! Construct sorting arrays 
    120141   ! 
    121    ALLOCATE( zsort(3,ntotobs), iset(ntotobs), & 
     142   ALLOCATE( zsort(5,ntotobs), iset(ntotobs), & 
    122143      & inum(ntotobs), iindex(ntotobs)) 
    123144   ii = 0 
     
    128149         zsort(2,ii) = obsdata(ia)%pphi(ij) 
    129150         zsort(3,ii) = obsdata(ia)%plam(ij) 
     151         iwmo = TRANSFER( obsdata(ia)%cdwmo(ij)(1:4), iwmo ) 
     152         zsort(4,ii) = iwmo 
     153         iwmo = TRANSFER( obsdata(ia)%cdwmo(ij)(5:8), iwmo ) 
     154         zsort(5,ii) = iwmo 
    130155         iset(ii) = ia 
    131156         inum(ii) = ij 
     
    135160   ! Get indexes for time sorting. 
    136161   ! 
    137    CALL index_sort_dp_n(zsort,3,iindex,ntotobs) 
     162   CALL index_sort_dp_n(zsort,5,iindex,ntotobs) 
    138163   ! 
    139164   ! Allocate output data 
     
    144169   ENDDO 
    145170   CALL init_obfbdata( obsoutdata ) 
    146    CALL alloc_obfbdata( obsoutdata, obsdata(ist)%nvar, ntotobs, nlev, & 
    147       &                 obsdata(ist)%nadd, obsdata(ist)%next, obsdata(ist)%lgrid ) 
     171   CALL alloc_obfbdata( obsoutdata, obsdata(1)%nvar, ntotobs, nlev, & 
     172      &                 obsdata(1)%nadd, obsdata(1)%next, obsdata(1)%lgrid ) 
    148173   ! 
    149174   ! Copy input data into output data 
Note: See TracChangeset for help on using the changeset viewer.