SURFEX v7.3
General documentation of Surfex
|
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