SURFEX v8.1
General documentation of Surfex
ncpost.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ######spl
6  PROGRAM ncpost
7 !
8 !! MODIFICATIONS
9 !! -------------
10 !! B. Decharme : partition pgd/prep (grid attributes are only in the PGD file)
11 !!
12 !-------------------------------------------------------------------------------
13 !
15 !
17  USE modd_surf_par
18  USE modi_open_filein_ol
19  USE modi_close_filein_ol
20  USE modi_read_surf
21  USE mode_pos_surf
22 !
23  USE yomhook ,ONLY : lhook, dr_hook
24  USE parkind1 ,ONLY : jprb
25 !
26  USE modi_end_io_surf_n
27  USE modi_init_io_surf_n
28  IMPLICIT NONE
29 
30  REAL, ALLOCATABLE, DIMENSION(:) :: ZLOC
31  REAL, ALLOCATABLE, DIMENSION(:) :: ZWRK
32  REAL, ALLOCATABLE, DIMENSION(:) :: XLON
33  REAL, ALLOCATABLE, DIMENSION(:) :: XLAT
34  INTEGER, ALLOCATABLE, DIMENSION(:):: IWRK2
35  CHARACTER(LEN=50) :: YCOMMENT
36  CHARACTER(LEN=50) :: NOM_ARTICLE
37  CHARACTER(LEN=12) :: HREC
38  CHARACTER(LEN=1) :: PATCHFLAG
39  CHARACTER(LEN=2) :: YPAS,YLVL
40  CHARACTER(LEN=10) :: CGRID_TYPE
41  LOGICAL :: GFOUND
42  LOGICAL :: LINITS ! true if PGD has been run
43  LOGICAL :: LSXNAM ! true if NCPOST.nam present
44  LOGICAL :: LCOORD ! true if LONLAT.dat present
45  LOGICAL :: LGEO=.true. !
46 
47  INTEGER :: IRET
48  INTEGER :: INI
49  INTEGER :: INJ
50  INTEGER :: IF, IC, IP
51  INTEGER :: IFIELD, IWFIELD
52  INTEGER :: IPATCH, JPATCH
53  INTEGER :: IBEG, IEND
54 
55 
56 
57  !plm
58  !=====================================================================
59  real, allocatable, dimension(:,:,:) :: zfield3d
60  real, allocatable, dimension(:,:) :: zfield2d
61  character (len=56) :: comlink
62  integer :: inb_forc
63  integer :: ji
64  REAL(KIND=JPRB) :: ZHOOK_HANDLE
65  !=====================================================================
66 
67  IF (lhook) CALL dr_hook('NCPOST',0,zhook_handle)
68  CALL surfex_alloc_list(1)
69  CALL goto_model(1)
70 
71  !=====================================================================
72  !*
73  !** get domain size and read latitudes and longitudes
74  !*
75  !=====================================================================
76 
77  INQUIRE(file='LONLAT.dat',exist=lcoord)
78  IF (.NOT.lcoord) THEN
79 
80  INQUIRE(file='PGD.txt', exist=linits)
81 
82  IF (.NOT. linits) THEN
83  WRITE(*,*)' Now grid attributes are only in the PGD file'
84  WRITE(*,*)' NO INPUT FILE FOUND FOR NCPOST'
85  WRITE(*,*)' YOU SHOULD AT LEAST RUN PGD! '
86  stop
87  ELSE
88  cfilein='PGD.txt'
89  ENDIF
90 
91  CALL init_io_surf_n(ysc%DTCO, ysc%U, 'ASCII ','FULL ','SURF ','READ ')
92 
93  CALL read_surf('ASCII ','DIM_FULL', ini, iret)
94  CALL read_surf('ASCII ','GRID_TYPE', cgrid_type, iret)
95 
96 
97  ALLOCATE(xlon(ini))
98  ALLOCATE(xlat(ini))
99 
100  IF (cgrid_type=='GAUSS ') THEN
101  CALL posnam(nunit,'FULL '//' '//'LONGAUSS',gfound,nluout)
102  ELSE
103  CALL posnam(nunit,'FULL '//' '//'XLON',gfound,nluout)
104  ENDIF
105 
106  READ(nunit,fmt=*)
107  READ(nunit,fmt='(A50)') ycomment
108  READ(nunit,fmt=*,err=100) xlon(:)
109 
110  IF (cgrid_type=='GAUSS ') THEN
111  CALL posnam(nunit,'FULL '//' '//'LATGAUSS',gfound,nluout)
112  ELSE
113  CALL posnam(nunit,'FULL '//' '//'XLAT',gfound,nluout)
114  ENDIF
115 
116  READ(nunit,fmt=*)
117  READ(nunit,fmt='(A50)') ycomment
118  READ(nunit,fmt=*,err=100) xlat(:)
119 
120  OPEN(unit=30,file='LONLAT.dat',form='FORMATTED')
121  DO ip=1,ini
122  WRITE(30,*)xlon(ip),xlat(ip)
123  ENDDO
124 
125  CALL end_io_surf_n('ASCII ')
126 
127  ENDIF
128 
129  !=====================================================================
130  !*
131  !** read fields from netcdf output file
132  !*
133  !=====================================================================
134 
135  INQUIRE(file='NCPOST.nam',exist=lsxnam)
136  IF (.NOT.lsxnam) THEN
137  WRITE(*,*)' > NCPOST.nam does not exist'
138  stop
139  ENDIF
140  OPEN(unit=46,file='NCPOST.nam',form='FORMATTED')
141  READ(46,'(A1,1X,A6,1X,A16,1X,A40)')patchflag,cmask,hrec,cfile
142 
143  CALL open_filein_ol
144  CALL init_io_surf_n(ysc%DTCO, ysc%U, 'OFFLIN','FULL ','SURF ','READ ')
145 
146  CALL read_surf('OFFLIN','DIM_FULL', ini, iret)
147  ALLOCATE(xlon(ini))
148  ALLOCATE(xlat(ini))
149  OPEN(unit=30,file='LONLAT.dat',form='FORMATTED')
150  DO ip=1,ini
151  READ(30,*)xlon(ip),xlat(ip)
152  ENDDO
153 
154  CALL read_surf('OFFLIN','NB_TIMESTP', inb_forc, iret)
155  CALL read_surf('OFFLIN','PATCH_NUMBER', ipatch, iret)
156  CALL system('rm SXPOST.nc')
157  comlink='ln -s '//cfile//' SXPOST.nc'
158  CALL system(comlink)
159 
160  IF (cmask == 'FORC') THEN
161  allocate(zfield2d(inb_forc-1,ini))
162  CALL read_surf('OFFLIN',hrec,zfield2d(:,:), iret)
163  do ji=1,ini
164  write(50,*)xlon(ji),xlat(ji),zfield2d(1,ji)
165  enddo
166  ELSEIF (cmask == 'SIMU') THEN
167  IF (patchflag == '+') THEN
168  allocate(zfield3d(ini,ipatch,inb_forc-1))
169  CALL read_surf('OFFLIN',hrec,zfield3d(:,:,:), iret)
170  do ji=1,ini
171  write(50,*)xlon(ji),xlat(ji),zfield3d(ji,1,1)
172  enddo
173  ELSE IF (patchflag == '-') THEN
174  allocate(zfield2d(ini,inb_forc-1))
175  CALL read_surf('OFFLIN',hrec,zfield2d(:,:), iret)
176  do ji=1,ini
177  write(50,*)xlon(ji),xlat(ji),zfield2d(ji,1)
178  enddo
179  ENDIF
180  ELSE
181  write(*,*)' > ',cmask,'NOT ALLOWED (only FORC|SIMU)'
182  write(*,*)' > Update NCPOST.nam'
183  stop
184  ENDIF
185 
186  CALL close_filein_ol
187  CALL surfex_deallo_list
188 
189  stop
190  100 CONTINUE
191  WRITE(nluout,*) ' '
192  WRITE(nluout,*) ' ERROR WHEN READING ARTICLE',hrec
193  WRITE(nluout,*) ' '
194 
195 
196  IF (lhook) CALL dr_hook('NCPOST',1,zhook_handle)
197  CONTAINS
198 
199  SUBROUTINE err_stop(HREC,CFILEIN,NLUOUT)
200  CHARACTER(LEN=12) :: HREC
201  CHARACTER(LEN=*) :: CFILEIN
202  INTEGER :: NLUOUT
203  REAL(KIND=JPRB) :: ZHOOK_HANDLE
204  IF (lhook) CALL dr_hook('ERR_STOP',0,zhook_handle)
205  WRITE(nluout,*) ' '
206  WRITE(nluout,*) ' ARTICLE ',trim(hrec),' NOT FOUND IN FILE ', cfilein
207  WRITE(nluout,*) ' '
208  WRITE(*,*) ' '
209  WRITE(*,*) ' ARTICLE ',trim(hrec),' NOT FOUND IN FILE ', cfilein
210  WRITE(*,*) ' '
211  stop
212  IF (lhook) CALL dr_hook('ERR_STOP',1,zhook_handle)
213  END SUBROUTINE err_stop
214 
215  !=====================================================================
216 
217 
218  END PROGRAM ncpost
program ncpost
Definition: ncpost.F90:6
character(len=6) cmask
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine err_stop(HREC, CFILEIN, NLUOUT)
Definition: ncpost.F90:200
subroutine close_filein_ol
subroutine goto_model(KMODEL)
subroutine surfex_deallo_list
integer, parameter jprb
Definition: parkind1.F90:32
type(surfex_t), pointer ysc
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine surfex_alloc_list(KMODEL)
character(len=28), save cfilein
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
character(len=28), save cfile
subroutine open_filein_ol