SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/ncpost.F90
Go to the documentation of this file.
00001 !     ######spl
00002         PROGRAM NCPOST
00003 !
00004 !!    MODIFICATIONS
00005 !!    -------------
00006 !!      B. Decharme : partition pgd/prep (grid attributes are only in the PGD file)
00007 !!
00008 !-------------------------------------------------------------------------------
00009 !
00010         USE MODD_IO_SURF_ASC
00011         USE MODD_SURF_PAR
00012         USE MODI_OPEN_FILEIN_OL
00013         USE MODI_CLOSE_FILEIN_OL
00014         USE MODI_READ_SURF
00015         USE MODE_POS_SURF
00016         USE MODD_IO_SURF_OL, ONLY : XSTART,XCOUNT,XSTRIDE,LPARTR
00017         
00018 !
00019         USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00020         USE PARKIND1  ,ONLY : JPRB
00021 !
00022         USE MODI_GOTO_SURFEX
00023 !
00024         USE MODI_END_IO_SURF_n
00025         USE MODI_INIT_IO_SURF_n
00026         IMPLICIT NONE        
00027 
00028         REAL, ALLOCATABLE, DIMENSION(:)   ::   ZLOC
00029         REAL, ALLOCATABLE, DIMENSION(:)   ::   ZWRK
00030         REAL, ALLOCATABLE, DIMENSION(:)   ::   XLON
00031         REAL, ALLOCATABLE, DIMENSION(:)   ::   XLAT
00032         INTEGER, ALLOCATABLE, DIMENSION(:)::   IWRK2
00033         CHARACTER(LEN=50)                 ::   YCOMMENT
00034         CHARACTER(LEN=50)                 ::   NOM_ARTICLE
00035         CHARACTER(LEN=12)                 ::   HREC
00036         CHARACTER(LEN=1)                  ::   PATCHFLAG
00037         CHARACTER(LEN=2)                  ::   YPAS,YLVL
00038         CHARACTER(LEN=10)                 ::   CGRID_TYPE
00039         LOGICAL                           ::   GFOUND
00040         LOGICAL                           ::   LINITS ! true if PGD has been run
00041         LOGICAL                           ::   LSXNAM ! true if NCPOST.nam present
00042         LOGICAL                           ::   LCOORD ! true if LONLAT.dat present
00043         LOGICAL                           ::   LGEO=.TRUE.  !
00044 
00045         INTEGER    ::   IRET
00046         INTEGER    ::   INI
00047         INTEGER    ::   INJ
00048         INTEGER    ::   IF, IC, IP
00049         INTEGER    ::   IFIELD, IWFIELD
00050         INTEGER    ::   IPATCH, JPATCH
00051         INTEGER    ::   IBEG, IEND
00052 
00053         
00054 
00055         !plm
00056         !=====================================================================
00057         real, allocatable, dimension(:,:,:)   ::   zfield3d
00058         real, allocatable, dimension(:,:)     ::   zfield2d
00059         character (len=40) :: cfile
00060         character (len=56) :: comlink
00061         integer    ::   inb_forc
00062         integer    ::   i
00063         REAL(KIND=JPRB) :: ZHOOK_HANDLE
00064         !=====================================================================
00065 
00066         IF (LHOOK) CALL DR_HOOK('NCPOST',0,ZHOOK_HANDLE)
00067         CALL GOTO_SURFEX(1,.TRUE.)
00068 
00069         !=====================================================================
00070         !*
00071         !** get domain size and read latitudes and longitudes 
00072         !*
00073         !=====================================================================
00074 
00075         INQUIRE(FILE='LONLAT.dat',EXIST=LCOORD)
00076         IF (.NOT.LCOORD) THEN
00077 
00078            INQUIRE(FILE='PGD.txt', EXIST=LINITS)
00079       
00080            IF (.NOT. LINITS) THEN
00081               WRITE(*,*)' Now grid attributes are only in the PGD file'
00082               WRITE(*,*)' NO INPUT FILE FOUND FOR NCPOST'
00083               WRITE(*,*)' YOU SHOULD AT LEAST RUN PGD! '
00084               STOP
00085            ELSE
00086               CFILEIN='PGD.txt'
00087            ENDIF
00088 
00089            CALL INIT_IO_SURF_n('ASCII ','FULL  ','SURF  ','READ ')
00090 
00091            CALL READ_SURF('ASCII ','DIM_FULL', INI, IRET)
00092            CALL READ_SURF('ASCII ','GRID_TYPE', CGRID_TYPE, IRET)
00093 
00094         
00095            ALLOCATE(XLON(INI))
00096            ALLOCATE(XLAT(INI))
00097 
00098            IF (CGRID_TYPE=='GAUSS     ') THEN
00099               CALL POSNAM(NUNIT,'FULL  '//' '//'LONGAUSS',GFOUND,NLUOUT)
00100            ELSE
00101               CALL POSNAM(NUNIT,'FULL  '//' '//'XLON',GFOUND,NLUOUT)
00102            ENDIF
00103 
00104            READ(NUNIT,FMT=*)
00105            READ(NUNIT,FMT='(A50)') YCOMMENT
00106            READ(NUNIT,FMT=*,ERR=100) XLON(:)
00107 
00108            IF (CGRID_TYPE=='GAUSS     ') THEN
00109               CALL POSNAM(NUNIT,'FULL  '//' '//'LATGAUSS',GFOUND,NLUOUT)
00110            ELSE
00111               CALL POSNAM(NUNIT,'FULL  '//' '//'XLAT',GFOUND,NLUOUT)
00112            ENDIF
00113 
00114            READ(NUNIT,FMT=*)
00115            READ(NUNIT,FMT='(A50)') YCOMMENT
00116            READ(NUNIT,FMT=*,ERR=100) XLAT(:)
00117 
00118            OPEN(UNIT=30,FILE='LONLAT.dat',FORM='FORMATTED')
00119            DO IP=1,INI
00120               WRITE(30,*)XLON(IP),XLAT(IP)
00121            ENDDO
00122 
00123            CALL END_IO_SURF_n('ASCII ')
00124                    
00125         ENDIF
00126 
00127         !=====================================================================
00128         !*
00129         !** read fields from netcdf output file
00130         !*
00131         !=====================================================================
00132 
00133         INQUIRE(FILE='NCPOST.nam',EXIST=LSXNAM)
00134         IF (.NOT.LSXNAM) THEN
00135            WRITE(*,*)' > NCPOST.nam does not exist'
00136            STOP
00137         ENDIF
00138         OPEN(UNIT=46,FILE='NCPOST.nam',FORM='FORMATTED')
00139         READ(46,'(A1,1X,A6,1X,A16,1X,A40)')PATCHFLAG,CMASK,HREC,CFILE
00140 
00141         CALL OPEN_FILEIN_OL
00142         call init_io_surf_n('OFFLIN','FULL  ','SURF  ','READ ')
00143         call read_surf('OFFLIN','DIM_FULL', INI, IRET)
00144         ALLOCATE(XLON(INI))
00145         ALLOCATE(XLAT(INI))
00146         OPEN(UNIT=30,FILE='LONLAT.dat',FORM='FORMATTED')
00147         DO IP=1,INI
00148            READ(30,*)XLON(IP),XLAT(IP)
00149         ENDDO
00150 
00151         call read_surf('OFFLIN','NB_TIMESTP', INB_FORC, IRET)
00152         CALL READ_SURF('OFFLIN','PATCH_NUMBER', IPATCH, IRET)
00153         call system('rm SXPOST.nc')
00154         comlink='ln -s '//CFILE//' SXPOST.nc'
00155         call system(comlink)
00156 
00157         IF (CMASK == 'FORC') THEN
00158            allocate(zfield2d(inb_forc-1,ini))
00159            call read_surf('OFFLIN',HREC,zfield2d(:,:), IRET)
00160            do i=1,ini
00161               write(50,*)xlon(i),xlat(i),zfield2d(1,i)
00162            enddo
00163         ELSEIF (CMASK == 'SIMU') THEN
00164            IF (PATCHFLAG == '+') THEN
00165               allocate(zfield3d(ini,ipatch,inb_forc-1))
00166               call read_surf('OFFLIN',HREC,zfield3d(:,:,:), IRET)
00167               do i=1,ini
00168                  write(50,*)xlon(i),xlat(i),zfield3d(i,1,1)
00169               enddo
00170            ELSE IF (PATCHFLAG == '-') THEN
00171               allocate(zfield2d(ini,inb_forc-1))
00172               call read_surf('OFFLIN',HREC,zfield2d(:,:), IRET)
00173               do i=1,ini
00174                  write(50,*)xlon(i),xlat(i),zfield2d(i,1)
00175               enddo
00176            ENDIF
00177         ELSE
00178            write(*,*)' > ',CMASK,'NOT ALLOWED (only FORC|SIMU)'
00179            write(*,*)' > Update NCPOST.nam'
00180            STOP
00181         ENDIF
00182 
00183         CALL CLOSE_FILEIN_OL
00184 
00185         STOP
00186  100    CONTINUE
00187         WRITE(NLUOUT,*) ' '
00188         WRITE(NLUOUT,*) ' ERROR WHEN READING ARTICLE',HREC
00189         WRITE(NLUOUT,*) ' '
00190         
00191 
00192         IF (LHOOK) CALL DR_HOOK('NCPOST',1,ZHOOK_HANDLE)
00193         CONTAINS
00194 
00195         SUBROUTINE ERR_STOP(HREC,CFILEIN,NLUOUT)
00196         CHARACTER(LEN=12)   ::   HREC
00197         CHARACTER(LEN=*)    ::   CFILEIN
00198         INTEGER             ::   NLUOUT
00199         REAL(KIND=JPRB) :: ZHOOK_HANDLE
00200         IF (LHOOK) CALL DR_HOOK('ERR_STOP',0,ZHOOK_HANDLE)
00201         WRITE(NLUOUT,*) ' '
00202         WRITE(NLUOUT,*) ' ARTICLE ',TRIM(HREC),' NOT FOUND IN FILE ', CFILEIN
00203         WRITE(NLUOUT,*) ' '
00204         WRITE(*,*) ' '
00205         WRITE(*,*) ' ARTICLE ',TRIM(HREC),' NOT FOUND IN FILE ', CFILEIN
00206         WRITE(*,*) ' '
00207         STOP
00208         IF (LHOOK) CALL DR_HOOK('ERR_STOP',1,ZHOOK_HANDLE)
00209         END SUBROUTINE ERR_STOP
00210 
00211         !=====================================================================
00212 
00213 
00214         END PROGRAM NCPOST