SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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=40) :: cfile
62  character (len=56) :: comlink
63  integer :: inb_forc
64  integer :: ji
65  REAL(KIND=JPRB) :: zhook_handle
66  !=====================================================================
67 
68  IF (lhook) CALL dr_hook('NCPOST',0,zhook_handle)
69  CALL surfex_alloc_list(1)
70  CALL goto_model(1)
71 
72  !=====================================================================
73  !*
74  !** get domain size and read latitudes and longitudes
75  !*
76  !=====================================================================
77 
78  INQUIRE(file='LONLAT.dat',exist=lcoord)
79  IF (.NOT.lcoord) THEN
80 
81  INQUIRE(file='PGD.txt', exist=linits)
82 
83  IF (.NOT. linits) THEN
84  WRITE(*,*)' Now grid attributes are only in the PGD file'
85  WRITE(*,*)' NO INPUT FILE FOUND FOR NCPOST'
86  WRITE(*,*)' YOU SHOULD AT LEAST RUN PGD! '
87  stop
88  ELSE
89  cfilein='PGD.txt'
90  ENDIF
91 
92  CALL init_io_surf_n(ysurf_cur%DTCO, ysurf_cur%DGU, ysurf_cur%U, &
93  'ASCII ','FULL ','SURF ','READ ')
94 
95  CALL read_surf(&
96  'ASCII ','DIM_FULL', ini, iret)
97  CALL read_surf(&
98  'ASCII ','GRID_TYPE', cgrid_type, iret)
99 
100 
101  ALLOCATE(xlon(ini))
102  ALLOCATE(xlat(ini))
103 
104  IF (cgrid_type=='GAUSS ') THEN
105  CALL posnam(nunit,'FULL '//' '//'LONGAUSS',gfound,nluout)
106  ELSE
107  CALL posnam(nunit,'FULL '//' '//'XLON',gfound,nluout)
108  ENDIF
109 
110  READ(nunit,fmt=*)
111  READ(nunit,fmt='(A50)') ycomment
112  READ(nunit,fmt=*,err=100) xlon(:)
113 
114  IF (cgrid_type=='GAUSS ') THEN
115  CALL posnam(nunit,'FULL '//' '//'LATGAUSS',gfound,nluout)
116  ELSE
117  CALL posnam(nunit,'FULL '//' '//'XLAT',gfound,nluout)
118  ENDIF
119 
120  READ(nunit,fmt=*)
121  READ(nunit,fmt='(A50)') ycomment
122  READ(nunit,fmt=*,err=100) xlat(:)
123 
124  OPEN(unit=30,file='LONLAT.dat',form='FORMATTED')
125  DO ip=1,ini
126  WRITE(30,*)xlon(ip),xlat(ip)
127  ENDDO
128 
129  CALL end_io_surf_n('ASCII ')
130 
131  ENDIF
132 
133  !=====================================================================
134  !*
135  !** read fields from netcdf output file
136  !*
137  !=====================================================================
138 
139  INQUIRE(file='NCPOST.nam',exist=lsxnam)
140  IF (.NOT.lsxnam) THEN
141  WRITE(*,*)' > NCPOST.nam does not exist'
142  stop
143  ENDIF
144  OPEN(unit=46,file='NCPOST.nam',form='FORMATTED')
145  READ(46,'(A1,1X,A6,1X,A16,1X,A40)')patchflag,cmask,hrec,cfile
146 
147  CALL open_filein_ol
148  CALL init_io_surf_n(ysurf_cur%DTCO, ysurf_cur%DGU, ysurf_cur%U, &
149  'OFFLIN','FULL ','SURF ','READ ')
150 
151  CALL read_surf(&
152  'OFFLIN','DIM_FULL', ini, iret)
153  ALLOCATE(xlon(ini))
154  ALLOCATE(xlat(ini))
155  OPEN(unit=30,file='LONLAT.dat',form='FORMATTED')
156  DO ip=1,ini
157  READ(30,*)xlon(ip),xlat(ip)
158  ENDDO
159 
160  CALL read_surf(&
161  'OFFLIN','NB_TIMESTP', inb_forc, iret)
162  CALL read_surf(&
163  'OFFLIN','PATCH_NUMBER', ipatch, iret)
164  CALL system('rm SXPOST.nc')
165  comlink='ln -s '//cfile//' SXPOST.nc'
166  CALL system(comlink)
167 
168  IF (cmask == 'FORC') THEN
169  allocate(zfield2d(inb_forc-1,ini))
170  CALL read_surf(&
171  'OFFLIN',hrec,zfield2d(:,:), iret)
172  do ji=1,ini
173  write(50,*)xlon(ji),xlat(ji),zfield2d(1,ji)
174  enddo
175  ELSEIF (cmask == 'SIMU') THEN
176  IF (patchflag == '+') THEN
177  allocate(zfield3d(ini,ipatch,inb_forc-1))
178  CALL read_surf(&
179  'OFFLIN',hrec,zfield3d(:,:,:), iret)
180  do ji=1,ini
181  write(50,*)xlon(ji),xlat(ji),zfield3d(ji,1,1)
182  enddo
183  ELSE IF (patchflag == '-') THEN
184  allocate(zfield2d(ini,inb_forc-1))
185  CALL read_surf(&
186  'OFFLIN',hrec,zfield2d(:,:), iret)
187  do ji=1,ini
188  write(50,*)xlon(ji),xlat(ji),zfield2d(ji,1)
189  enddo
190  ENDIF
191  ELSE
192  write(*,*)' > ',cmask,'NOT ALLOWED (only FORC|SIMU)'
193  write(*,*)' > Update NCPOST.nam'
194  stop
195  ENDIF
196 
197  CALL close_filein_ol
198  CALL surfex_deallo_list
199 
200  stop
201  100 CONTINUE
202  WRITE(nluout,*) ' '
203  WRITE(nluout,*) ' ERROR WHEN READING ARTICLE',hrec
204  WRITE(nluout,*) ' '
205 
206 
207  IF (lhook) CALL dr_hook('NCPOST',1,zhook_handle)
208  CONTAINS
209 
210  SUBROUTINE err_stop(HREC,CFILEIN,NLUOUT)
211  CHARACTER(LEN=12) :: hrec
212  CHARACTER(LEN=*) :: cfilein
213  INTEGER :: nluout
214  REAL(KIND=JPRB) :: zhook_handle
215  IF (lhook) CALL dr_hook('ERR_STOP',0,zhook_handle)
216  WRITE(nluout,*) ' '
217  WRITE(nluout,*) ' ARTICLE ',trim(hrec),' NOT FOUND IN FILE ', cfilein
218  WRITE(nluout,*) ' '
219  WRITE(*,*) ' '
220  WRITE(*,*) ' ARTICLE ',trim(hrec),' NOT FOUND IN FILE ', cfilein
221  WRITE(*,*) ' '
222  stop
223  IF (lhook) CALL dr_hook('ERR_STOP',1,zhook_handle)
224  END SUBROUTINE err_stop
225 
226  !=====================================================================
227 
228 
229  END PROGRAM ncpost
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
program ncpost
Definition: ncpost.F90:6
subroutine err_stop(HREC, CFILEIN, NLUOUT)
Definition: ncpost.F90:210
subroutine close_filein_ol
subroutine surfex_deallo_list
subroutine goto_model(KMODEL)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine surfex_alloc_list(KMODEL)
subroutine open_filein_ol