- Timestamp:
- 2011-10-26T15:44:20+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_2802_OBStools/NEMOGCM/TOOLS/OBSTOOLS/src/fbcomb.F90
r2945 r3000 1 1 PROGRAM 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 !!---------------------------------------------------------------------- 2 18 USE toolspar_kind 3 19 USE obs_fbm … … 23 39 REAL(KIND=dp),ALLOCATABLE :: zsort(:,:) 24 40 INTEGER,ALLOCATABLE :: iset(:),inum(:),iindex(:) 41 INTEGER :: iwmo 25 42 ! 26 43 ! Output data … … 30 47 ! Loop variables 31 48 ! 32 INTEGER :: ia,iv,ii,ij , ist49 INTEGER :: ia,iv,ii,ij 33 50 ! 34 51 ! Get number of command line arguments … … 48 65 ntotobs = 0 49 66 ninfiles = nargs - 1 50 ist=-151 67 DO ia=1, ninfiles 52 68 CALL getarg( ia+1, cdinfile(ia) ) … … 55 71 WRITE(*,'(2A)')'File = ', TRIM(cdinfile(ia)) 56 72 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 in58 73 ntotobs = ntotobs + obsdata(ia)%nobs 59 74 ENDDO … … 62 77 ! Check that the data is confirming 63 78 ! 64 DO ia= ist+1, ninfiles65 IF ( obsdata(ia)%cdjuldref /= obsdata( ist)%cdjuldref ) THEN79 DO ia=2, ninfiles 80 IF ( obsdata(ia)%cdjuldref /= obsdata(1)%cdjuldref ) THEN 66 81 WRITE(*,*)'Different julian date reference. Aborting' 67 82 CALL abort 68 83 ENDIF 69 IF ( obsdata(ia)%nvar /= obsdata( ist)%nvar ) THEN84 IF ( obsdata(ia)%nvar /= obsdata(1)%nvar ) THEN 70 85 WRITE(*,*)'Different number of variables. Aborting' 71 86 CALL abort 72 87 ENDIF 73 IF (obsdata(ia)%nadd /= obsdata( ist)%nadd ) THEN88 IF (obsdata(ia)%nadd /= obsdata(1)%nadd ) THEN 74 89 WRITE(*,*)'Different number of additional entries. Aborting' 75 90 CALL abort 76 91 ENDIF 77 IF ( obsdata(ia)%next /= obsdata( ist)%next ) THEN92 IF ( obsdata(ia)%next /= obsdata(1)%next ) THEN 78 93 WRITE(*,*)'Different number of additional variables. Aborting' 79 94 CALL abort 80 95 ENDIF 81 IF ( obsdata(ia)%lgrid .NEQV. obsdata( ist)%lgrid ) THEN96 IF ( obsdata(ia)%lgrid .NEQV. obsdata(1)%lgrid ) THEN 82 97 WRITE(*,*)'Inconsistent grid search info. Aborting' 83 98 CALL abort 84 99 ENDIF 85 100 DO iv=1, obsdata(ia)%nvar 86 IF ( obsdata(ia)%cname(iv) /= obsdata( ist)%cname(iv) ) THEN101 IF ( obsdata(ia)%cname(iv) /= obsdata(1)%cname(iv) ) THEN 87 102 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)), & 89 104 & '. Aborting' 90 105 CALL abort 91 106 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 98 119 ENDIF 99 120 ENDIF 100 121 ENDDO 101 122 DO iv=1,obsdata(ia)%nadd 102 IF ( obsdata(ia)%caddname(iv) /= obsdata( ist)%caddname(iv) ) THEN123 IF ( obsdata(ia)%caddname(iv) /= obsdata(1)%caddname(iv) ) THEN 103 124 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)), & 105 126 & '. Aborting' 106 127 CALL abort … … 108 129 ENDDO 109 130 DO iv=1,obsdata(ia)%next 110 IF ( obsdata(ia)%cextname(iv) /= obsdata( ist)%cextname(iv) ) THEN131 IF ( obsdata(ia)%cextname(iv) /= obsdata(1)%cextname(iv) ) THEN 111 132 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)), & 113 134 & '. Aborting' 114 135 CALL abort … … 119 140 ! Construct sorting arrays 120 141 ! 121 ALLOCATE( zsort( 3,ntotobs), iset(ntotobs), &142 ALLOCATE( zsort(5,ntotobs), iset(ntotobs), & 122 143 & inum(ntotobs), iindex(ntotobs)) 123 144 ii = 0 … … 128 149 zsort(2,ii) = obsdata(ia)%pphi(ij) 129 150 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 130 155 iset(ii) = ia 131 156 inum(ii) = ij … … 135 160 ! Get indexes for time sorting. 136 161 ! 137 CALL index_sort_dp_n(zsort, 3,iindex,ntotobs)162 CALL index_sort_dp_n(zsort,5,iindex,ntotobs) 138 163 ! 139 164 ! Allocate output data … … 144 169 ENDDO 145 170 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 ) 148 173 ! 149 174 ! Copy input data into output data
Note: See TracChangeset
for help on using the changeset viewer.