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.
convmerge.F90 in branches/NERC/dev_r5107_NOC_MEDUSA/NEMOGCM/TOOLS/OBSTOOLS/src – NEMO

source: branches/NERC/dev_r5107_NOC_MEDUSA/NEMOGCM/TOOLS/OBSTOOLS/src/convmerge.F90 @ 5712

Last change on this file since 5712 was 3000, checked in by djlea, 13 years ago

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 size: 4.1 KB
Line 
1MODULE convmerge
2
3   USE toolspar_kind
4   USE obs_fbm
5   USE obs_utils
6   IMPLICIT NONE
7
8CONTAINS
9
10   SUBROUTINE conv_fbmerge( cdoutfile, nfiles, fbdata )
11      !!---------------------------------------------------------------------
12      !!
13      !!                     ** ROUTINE conv_fbmerg **
14      !!
15      !!  ** Purpose : Merge all fbfiles into a single fbfile
16      !!
17      !!  ** Method  : Use of utilities from obs_fbm.
18      !!
19      !!  ** Action  :
20      !!
21      !!   Optional :
22      !!     namelist = namobs.in    to select the observation range
23      !!
24      !!   History :
25      !!        ! 2010 (K. Mogensen) Initial version
26      !!----------------------------------------------------------------------
27      !! * Arguments
28      CHARACTER(LEN=*) :: cdoutfile                ! Input file.
29      INTEGER :: nfiles                            ! Number of files
30      TYPE(obfbdata), dimension(nfiles) :: fbdata  ! Structure to merge
31      !! * Local variables
32      type(obfbdata) :: fbmerge
33      INTEGER,ALLOCATABLE  :: iset(:),inum(:),iindex(:)
34      INTEGER :: nmaxlev
35      INTEGER :: ia,ij,ii
36      REAL(fbdp), DIMENSION(nfiles) :: djulini, djulend
37      CHARACTER(len=8) :: cl_refdate
38      INTEGER :: irefdate,iyea,imon,iday,ihou,imin,isec
39      ! Namelist variables
40      CHARACTER(len=9) :: cdnamefile='namobs.in'
41      LOGICAL :: lexists 
42      REAL(fbdp) :: dobsini,dobsend
43      NAMELIST/namobs/dobsini,dobsend
44     
45      dobsini = 0.0
46      dobsend = 99991231.235959
47
48      INQUIRE(file=cdnamefile, exist=lexists)
49      IF (lexists) THEN
50         OPEN(10,file=cdnamefile)
51         READ(10,namobs)
52         WRITE(*,namobs)
53         CLOSE(10)
54      ENDIF
55      !
56      ! Count number of data points
57      !
58      nmaxlev = 1
59      ii = 0
60      DO ia = 1,nfiles
61         IF (lexists) THEN
62            cl_refdate=fbdata(ia)%cdjuldref(1:8)
63            READ(cl_refdate,'(I8)') irefdate
64            CALL ddatetoymdhms( dobsini, iyea, imon, iday, ihou, imin, isec )
65            CALL greg2jul( isec, imin, ihou, iday, imon, iyea, djulini(ia), &
66               &           krefdate = irefdate )
67            CALL ddatetoymdhms( dobsend, iyea, imon, iday, ihou, imin, isec )
68            CALL greg2jul( isec, imin, ihou, iday, imon, iyea, djulend(ia), &
69            &           krefdate = irefdate )
70            DO ij = 1, fbdata(ia)%nobs
71               IF ( ( fbdata(ia)%ptim(ij) >  djulini(ia) ) .AND. &
72                  & ( fbdata(ia)%ptim(ij) <= djulend(ia) ) ) THEN
73                  ii = ii + 1
74                  nmaxlev = MAX(nmaxlev,fbdata(ia)%nlev)
75               ENDIF
76            ENDDO
77         ELSE
78            nmaxlev = MAX(nmaxlev,fbdata(ia)%nlev)
79            ii = ii + fbdata(ia)%nobs
80         ENDIF
81      ENDDO
82      !
83      ! Merge the input structures into the output structure
84      !
85      ALLOCATE( iset(ii), inum(ii), iindex(ii))
86      ii = 0
87      DO ia = 1,nfiles
88         DO ij = 1, fbdata(ia)%nobs
89            IF (lexists) THEN
90               IF ( ( fbdata(ia)%ptim(ij) >  djulini(ia) ) .AND. &
91                  & ( fbdata(ia)%ptim(ij) <= djulend(ia) ) ) THEN
92                  ii = ii + 1
93                  iset(ii)   = ia
94                  inum(ii)   = ij
95                  iindex(ii) = ii
96               ENDIF
97            ELSE
98               ii = ii + 1
99               iset(ii)   = ia
100               inum(ii)   = ij
101               iindex(ii) = ii
102            ENDIF
103         ENDDO
104      ENDDO
105      WRITE(*,*)'Output number of observations = ',ii
106      WRITE(*,*)'Output number of levels       = ',nmaxlev
107      !
108      ! Prepare fbmerge structure
109      !
110      CALL init_obfbdata( fbmerge )
111      CALL alloc_obfbdata( fbmerge, fbdata(1)%nvar, ii, nmaxlev, &
112         &                 fbdata(1)%nadd, fbdata(1)%next, fbdata(1)%lgrid )
113      CALL merge_obfbdata( nfiles, fbdata, fbmerge, iset, inum, iindex )
114      !
115      ! Write the file
116      !
117      CALL write_obfbdata( TRIM(cdoutfile), fbmerge )
118      !
119      ! Dellocate the data
120      !
121      CALL dealloc_obfbdata( fbmerge )
122
123   END SUBROUTINE conv_fbmerge
124
125#include "ctl_stop.h90"
126
127#include "greg2jul.h90"
128
129!#include "ddatetoymdhms.h90"
130
131END MODULE convmerge
Note: See TracBrowser for help on using the repository browser.