!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!
SUBROUTINE SUFILNAM 1
use mod4dv
, only : l4dvar
USE procs_topo
,ONLY : myid
IMPLICIT NONE
#if defined (DOC)
*s/r SUFILNAM -INITIALZE INPUT/OUTPUT FILE NAMES FOR 3DVAR.
*
************************************************************************
*
*Author . P. KOCLAS CMC/CMSV TEL. 4628
* Revision:
* . J. St-James *CMC/CMSV JUNE 1997
* - add a new key for the file containing the
* lat, lon positions of obs. (NINCREM = 2)
* - documentation
* . P. KOCLAS *CMC/CMDA JAN 2000
* -ADD SATWIND (SW) FAMILY
* . S. Pellerin *ARMA/AES march 2000
* - Output stat file
* . S. Pellerin *ARMA/SMC May 2000
* - Illimination of NAMBRN for I/O file name
* CCARD only from now on
* - Logical unit cleanup
* . S. Pellerin *ARMA/SMC nov. 2001
* - Introdution of key 'exc4dv' controling
* 3Dvar mode / 4Dvar exchange directory
* . N. Wagneur *MSC/CMC June 2002
* - Addition of GOES ('GO') familiy
* . J. St-James *CMDA/SMC - July 2003
* - Add Profiler ('PR') family
* . JM Belanger *MSC/CMC Nov 2003
* - Addition of QUIKSCAT ('SC') familiy
* . J.M. Aparicio *ARMA/MSC* October 2006
* - Adapt for GPSRO
* . A. Beaulne *CMDA/SMC - August 2007
* - Put a dot after the AX_## of all families
* in CLE variable
* . Bin He *ARMA/SMC - Apr. 2008
* - Reading multiple trial files.
* Note that asumming Units starting from 550 are
* reserved for trial files.
* . S. Pellerin, ARMA, August 2008
* - Use of fnom to generate automatic logical unit
* numbers of multiple trial files
* . Bin HE , ARMA, Oct. 2008
* - Hardcoded the name of trial files as "TRLM_??".
* Use "INQUIRE" to detect the existance of these trial files.
* Removed the namelist NAMTRIAL from "comlun.cdk"
* . Bin He , ARMA, Jan. 2009 .
* - Implemented MPI version .
*
*
************************************************************************
#endif
*
#include "comct0.cdk"
#include "comlun.cdk"
#include "comvfiles.cdk"
INTEGER INFIL,IPOSIT,IER,INBLKS,II,I,JJ
INTEGER FNOM,FCLOS,FSTOUV,NUMBLKS,K
PARAMETER(INFIL=129)
c
CHARACTER *128 CLVALU(INFIL),CFAMI(INFIL)
C
C
CHARACTER *2 flnum
CHARACTER *9 trialfile
CHARACTER *36 OneSatOBS
INTEGER ier1,ier2,istatus ,chlength
LOGICAL ltrial,isExist_L
************************************************************************
*
DATA CFAMI /'ST','TR','ST','ST','ST','ST','ST','ST','ST'
& ,8*'UA',8*'HU',8*'ST',8*'AI',8*'SF',8*'MI',8*'TO',8*'SW'
& ,8*'OZ',8*'AC',8*'GO',8*'SC',8*'PR',8*'RO',8*'GP'/
************************************************************************
IPOSIT=0
c
CLVALU(1) = './flnml'
CLVALU(2) = './obscov'
CLVALU(3) = './trlm'
CLVALU(4) = './anlm'
CLVALU(5) = './glbcov'
CLVALU(6) = './rebm'
CLVALU(7) = './rehm'
CLVALU(8) = ''
CLVALU(9) = './preconin'
CLVALU(10) = 'brpuan'
CLVALU(11) = 'brpuas'
CLVALU(12) = 'brpai'
CLVALU(13) = 'brpain'
CLVALU(14) = 'brpais'
CLVALU(15) = 'brpsfc'
CLVALU(16) = 'brpsf'
CLVALU(17) = 'brptov'
CLVALU(18) = 'brpsw'
CLVALU(19) = 'brpswgoes9'
CLVALU(20) = 'brpswgoese'
CLVALU(21) = 'brpswgoesw'
CLVALU(22) = 'brpswmodis'
CLVALU(23) = 'brpswmtsate'
CLVALU(24) = 'brpswmtsatw'
CLVALU(25) = 'brpgo'
CLVALU(26) = 'brpsc'
CLVALU(27) = 'brppr'
CLVALU(28) = 'brpro'
CLVALU(29) = 'brphum'
CLVALU(30) = 'brpsat'
CLVALU(31) = 'brpssm'
CLVALU(32) = 'brpo3'
CLVALU(33) = 'brpoz'
CLVALU(34) = 'brpgp'
CLVALU(35) = ' '
OneSatObs = ''
CFAMI(10) = 'UA'
CFAMI(11) = 'UA'
CFAMI(12) = 'AI'
CFAMI(13) = 'AI'
CFAMI(14) = 'AI'
CFAMI(15) = 'SF'
CFAMI(16) = 'SF'
CFAMI(17) = 'TO'
CFAMI(18) = 'SW'
CFAMI(19) = 'SW'
CFAMI(20) = 'SW'
CFAMI(21) = 'SW'
CFAMI(22) = 'SW'
CFAMI(23) = 'SW'
CFAMI(24) = 'SW'
CFAMI(25) = 'GO'
CFAMI(26) = 'SC'
CFAMI(27) = 'PR'
CFAMI(28) = 'RO'
CFAMI(29) = 'HU'
CFAMI(30) = 'ST'
CFAMI(31) = 'MI'
CFAMI(32) = 'OZ'
CFAMI(33) = 'OZ'
CFAMI(34) = 'GP'
CFAMI(35) = ' '
c
INQUIRE(FILE=CLVALU(1),EXIST=isExist_L)
IF ( isExist_L )then
write(nulout,*) 'sufilnam:CLVALU(1),NULNAM ',CLVALU(1),NULNAM
IER=FNOM(NULNAM,clvalu(1),'FTN+SEQ+R/O',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'INML - File :', clvalu(1)
write(nulout,*) ' opened as unit file ',nulnam
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM:Problem opening namelist file!')
ENDIF
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM:No namelist file specified!')
ENDIF
C
CALL SUCT0
(NULOUT)
c
INQUIRE(FILE=CLVALU(2),EXIST=isExist_L)
IF ( isExist_L )then
IER=FNOM(NULSTAT,CLVALU(2),'RND+OLD+R/O',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'IOBSST - File :', clvalu(2)
write(nulout,*) ' opened as unit file ',nulstat
ier = fstouv(nulstat,'RND+OLD')
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM:NO OBSERVATION STAT FILE!!')
ENDIF
ENDIF
C
C____ INITIALIZE TRIAL FIELD FILE NAME
C_____ Hardcoded the names of trial files
C
ntrials=0
jj=1
DO
WRITE(flnum,'(I2.2)') jj
trialfile='./trlm_'//flnum
INQUIRE(FILE=trialfile,EXIST=ltrial)
IF(ltrial) THEN
ntrials=ntrials+1
ier1=FNOM(ninmpg(ntrials),trialfile,'RND+OLD+R/O',0)
WRITE(nulout,*) 'ITRIAL - File :', trialfile
WRITE(nulout,*) ' opened as unit file ',ninmpg(ntrials)
ier1 = fSTOUV(ninmpg(ntrials),'RND+OLD')
ELSE IF ( (.not. ltrial) .and. ntrials >0 ) THEN
EXIT
ELSE IF ( (.not. ltrial) .and. ntrials == 0 ) THEN
CALL ABORT3D
(NULOUT,'SUFILNAM:NO TRIAL FILE')
ENDIF
jj=jj+1
ENDDO
C
C____ INITIALIZE ANALYSYS FILE NAME
C
IF(myid == 0) THEN ! CLVALU(4) is output...
IER=FNOM(nulstd,CLVALU(4),'RND',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'OANAL - File :', clvalu(4)
write(nulout,*) ' opened as unit file ',nulstd
IER = FSTOUV(NULSTD,'RND')
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM:UNABLE TO OPEN ANAL FILE!!')
ENDIF
ENDIF
c
INQUIRE(FILE=CLVALU(5),EXIST=isExist_L)
IF ( isExist_L )then
IER=FNOM(nulbgst,CLVALU(5),'RND+OLD+R/O',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'IBGST - File :', clvalu(5)
write(nulout,*) ' opened as unit file ',nulbgst
ier = fstouv(nulbgst,'RND+OLD')
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM:NO BACKGROUND STAT FILE!!')
ENDIF
ENDIF
c==============================================================
IF(myid == 0) THEN
ier = fnom(nulinclr,clvalu(6),'RND',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'OINCLR - File :', clvalu(6)
write(nulout,*) ' opened as unit file ',nulinclr
ier = fstouv(nulinclr,'RND')
else
CALL ABORT3D
(NULOUT,'SUFILNAM')
endif
ENDIF
c
IF(myid == 0) THEN
ier = fnom(nulinchr,clvalu(7),'RND',0)
IF ( IER .EQ. 0 ) THEN
write(nulout,*) 'OINCHR - File :', clvalu(7)
write(nulout,*) ' opened as unit file ',nulinchr
ier = fstouv(nulinchr,'RND')
ELSE
CALL ABORT3D
(NULOUT,'SUFILNAM')
ENDIF
ENDIF
c
! Get CLVALU(8) through Environment Variables.
CALL get_environment_variable('ARMA_EXEC4DV',CLVALU(8),
+ chlength,istatus,.true.)
print*,'EXEC4D,CLVALU(8)= ',CLVALU(8)
if ( len_trim(clvalu(8)) .gt. 0 ) then
CEXC4DV=clvalu(8)
l4dvar=.true.
else
l4dvar=.false.
endif
WRITE(nulout,*)' l4dvar = ',l4dvar
C
C------ Preconditioning..
INQUIRE(FILE=CLVALU(9),EXIST=isExist_L)
if ( isExist_L ) then
CPCONF=clvalu(9)
lpcon=.true.
else
lpcon=.false.
endif
c
C-------Check Burp files....
CALL GET_ENVIRONMENT_VARIABLE('VAR3D_BGCK',OneSatObs,chlength,istatus,.true.)
print*,'OneSatObs = ',OneSatObs
print*,'NCONF LEN OF OneSatObs = ',nconf,len_trim(OneSatObs)
IF((NCONF == 101 .or. NCONF == 121).and. len_trim(OneSatObs) > 0 ) THEN
ii=0
NKOUNT=1
INQUIRE(FILE=OneSatObs,EXIST=isExist_L)
IF(isExist_L)THEN
IER=FNOM(II,OneSatObs,'RND+OLD',0)
IF(ier == 0) THEN
INBLKS = -1
INBLKS=NUMBLKS(II)
IF(INBLKS >0 )THEN
CBURP(1)=OneSatObs
CFAM(1)='SW'
ENDIF
ENDIF
IER = FCLOS(II)
DO jj=1,INFIL
IF(oneSatObs == CLVALU(jj) ) THEN
CFAM(1)=CFAMI(jj)
EXIT
ENDIF
ENDDO
ELSE
CALL ABORT3D
(nulout,'SUFILNAM:file doesnot exist!')
ENDIF
ELSE
NKOUNT=0
DO JJ=10,INFIL
II=0
IF(CLVALU(JJ) /= '') THEN
INQUIRE(FILE=CLVALU(JJ),EXIST=isExist_L)
!!!IF((NCONF == 101 .or. NCONF == 121) .and. (CLVALU(JJ) == 'brptov'.or.CLVALU(JJ) == 'brpais'.or. CLVALU(JJ) == 'brpain')) isExist_L=.false.
IF(NCONF == 101 .and. (CLVALU(JJ) == 'brptov'.or.CLVALU(JJ) == 'brpais'.or. CLVALU(JJ) == 'brpain')) isExist_L=.false.
ELSE
EXIT
ENDIF
IF ( isExist_L )THEN
IER=FNOM(II,CLVALU(JJ),'RND+OLD',0)
WRITE(NULOUT,*)' Open File : ',CLVALU(JJ)
IF ( IER .EQ. 0 ) THEN
INBLKS= -1
INBLKS=NUMBLKS(II)
IF ( INBLKS .GT. 0 ) THEN
C=======================================
NKOUNT=NKOUNT+1
CBURP(NKOUNT)=CLVALU(JJ)
CFAM(NKOUNT)=CFAMI(JJ)
C=======================================
ENDIF
ENDIF
IER= FCLOS(II)
ENDIF
END DO
ENDIF
C
C Hard coded restart file name
crestart='wrmrestart'
INQUIRE(file=crestart,exist=lrestart)
C
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*)' NUMBER OF BURP FILES IS :',NKOUNT
WRITE(NULOUT,*)'TYPE NAME '
WRITE(NULOUT,*)'---- ---- '
DO JJ=1,NKOUNT
WRITE(NULOUT,'(1X,A2,1X,A128)' )CFAM(JJ),CBURP(JJ)
END DO
RETURN
END