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/UKMO/r5518_INGV1_WAVE-coupling/NEMOGCM/TOOLS/OBSTOOLS/src – NEMO

source: branches/UKMO/r5518_INGV1_WAVE-coupling/NEMOGCM/TOOLS/OBSTOOLS/src/convmerge.F90 @ 7152

Last change on this file since 7152 was 7152, checked in by jcastill, 7 years ago

Initial implementation of wave coupling branch - INGV wave branch + UKMO wave coupling branch

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.