!-------------------------------------- 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 SUGOES(KULOUT) 1,6
#if defined (DOC)
*
***s/r SUGOES : Initialisation of the RADIANCE processing and
* . radiative transfer model (for GOES atm)
*
*Author : Nicolas Wagneur *CMDA/SMC Avril 2001
*
* -------------------
** Purpose: to read in GOES radiance bias corections, surface
* . fields, initialize the MSCFAST radiative transfer model.
*
*Arguments
* i : KULOUT : logical unit for output
*
#endif
IMPLICIT NONE
*implicits
#include "cparamgoes.cdk"
#include "comgoes.cdk"
#include "cominitrad.cdk"
#include "comfilt.cdk"
#include "cvcord.cdk"
*
INTEGER KULOUT,IGO(JPNGAS)
INTEGER JK, KIERR, J, K, L, IBT1, IBT2, IBT3
C
INTEGER KLISTE(JPNB,JPNGAS),KLISTB(JPNB),KIDOWN(JPNB)
c
REAL*8 DDFQ(JPNB),DDPIAD(JPNB,JPNGAS)
REAL*8 DDZDK(JPNB,JPNGAS),DDVOIGT(JPNB,6)
REAL*8 DDACON(JPNB),DDFCON(JPNB),DDFORCON(JPNB),DDTCOF(JPNB,2)
REAL*8 DDO2CON(JPNB,2),DDN2CON(JPNB,2)
REAL*8 DDCT1(JPNB,JPNGAS,JPNTEM),DDCT2(JPNB,JPNGAS,JPNTEM)
REAL*8 DDADJ1(JPNB,JPNGP1),DDADJ2(JPNB,JPNGP1)
REAL*8 DDBIA1(JPNB),DDBIA2(JPNB)
REAL*8 DDFITB(JPNB,JPNGP1),DDFITC(JPNB,JPNGP1),DDSEC1,DDSEC2
REAL PFOZO(JPNLATO3,JPNLEVO3),PTOTOZO(JPNLATO3,12)
C
CHARACTER*6 CDSATNAM
CHARACTER*2 CDUM
integer :: jf
C
LOGICAL LLGO
C
C Brightness temperature burp element
DATA IBT1 / 12062 /
DATA IBT2 / 12063 /
DATA IBT3 / 12163 /
DATA IGO / 1, 1, 1, 1, 1, 1, 1, 1 /
C
INTEGER I, IDATE, ITIME, IJULIAN, IYEAR, IMONTH, IDAY
INTEGER NEWDATE, RESULT, IPAS
REAL JJULIEN, DELT
EXTERNAL RTMSCGETPAR, JJULIEN, DATEC
EXTERNAL SUGOESST
EXTERNAL ABORT3D, READNML
C
LLGO = .FALSE.
DO JF = 1, NFILES
IF ( CFAMTYP(JF) .EQ. 'GO' .AND. NBEGINTYP(JF).GT. 0) LLGO =
& .TRUE.
ENDDO
if(.not. llgo) return ! Exit if there are not GOES data
C* . 1.0 Is brightness temperature an element to assimilate ?
C . ----------------------------------------------------
100 CONTINUE
C
LLGO = .FALSE.
DO J = 1, NELEMS
IF ( NLIST(J) .EQ. IBT1 .OR.
S NLIST(J) .EQ. IBT2 .OR.
S NLIST(J) .EQ. IBT3 ) THEN
LLGO = .TRUE.
ENDIF
ENDDO
c
IF ( .NOT. LLGO ) RETURN
C
C* . 1.1 Default values
C . --------------
110 CONTINUE
C
DO JK=1,JPNSATGO
NIDSATGO(JK) = 0
END DO
C
NSATGO = 2
DO JK =1, NSATGO
NIDSATGO(JK) = 8 + ( JK-1 )*2
ENDDO
LTSTGO = .FALSE.
LDBGGO = .FALSE.
LRTNADIRGO = .FALSE.
CRTMODLGO = 'MSCFAST'
NICLOUD = 1
NIASSIM = 0
NEMIFLAG = 1
NIPSFLAG = 1
NKBIAS = 1
NKTUNE = 1
NIB1 = 19
NIB2 = 22
NIMODE = 1
NNGAS = 8
DO JK =1, NNGAS
NIGO = 1
ENDDO
C
C* . 1.2 Read the NAMELIST NAMGOES to modify them
C . ---------------------------------------
120 CONTINUE
CALL READNML
('NAMGOES',KIERR)
C
C* . 1.3 Validate namelist values
C . ------------------------
130 CONTINUE
C
IF ( NSATGO .GT. JPNSATGO ) THEN
WRITE(KULOUT,FMT=9130)
9130 FORMAT(' SUGOES: Number of satellites (NSATGO )',
S ' is greater than maximum allowed (JPNSATGO)')
CALL ABORT3D
(KULOUT,'SUGOES ')
ENDIF
C
IF ( CRTMODLGO .NE. 'MSCFAST' ) THEN
WRITE(KULOUT,FMT=9131)
9131 FORMAT(' SUGOES: Invalid radiation model name')
CALL ABORT3D
(KULOUT,'SUGOES ')
ENDIF
C
C* . 1.4 Print the content of this NAMELIST
C . ----------------------------------
C
140 CONTINUE
WRITE(KULOUT,FMT=9140) LTSTGO,
S LDBGGO, LRTNADIRGO, CRTMODLGO
WRITE(KULOUT,FMT=9141) NSATGO, (NIDSATGO (JK), JK=1,NSATGO)
C
9140 FORMAT(/,3X,'- Parameters used for GO processing'
S ,' (read in NAMGO)'
S ,/,3X,' ----------------------------------'
S ,'------------------'
S ,/,6X,'Testing of adjoints : ',2X,L1
S ,/,6X,'RADIANCE debug : ',2X,L1
S ,/,6X,'Nadir calculation : ',2X,L1
S ,/,6X,'Radiative transfer model: ',2X,A)
C
9141 FORMAT(/,6X,"Number of satellites : ",I3
S ,/,6X,"Satellites : ",10I3)
C
WRITE(KULOUT,FMT=9142)
9142 FORMAT(//,3X,"- Reading and initialization in preparation to the "
S ,"RADIANCE processing",/,5X,64('-'))
C
C* 2. Initialize the observation error covariance
C . -------------------------------------------
C
200 CONTINUE
C
CALL SUGOESST
C
C
C* 3. Initialize MSCFAST radiance transfer model
C . ------------------------------------------
C
300 CONTINUE
C
IF ( CRTMODLGO .EQ. 'MSCFAST' ) THEN
WRITE(KULOUT,FMT=9300)
9300 FORMAT(//,10x,"-INIRAD: initializing the MSCFAST radiative "
S ,"transfer model" )
C
C* 3.1 Jour julien l'anne et le mois de NSTAMP
C . ---------------------------------------
C
DELT = 0.0
IPAS = 0
IJULIAN = JJULIEN(DELT,IPAS,NBRPSTAMP)
RESULT = NEWDATE(NBRPSTAMP,IDATE,ITIME,-3)
IYEAR = IDATE/10000
IMONTH = ( IDATE - IYEAR*10000 ) / 100
IDAY = ( IDATE - ( IYEAR*10000 + IMONTH*100 ) )
IF (RESULT.NE.0) THEN
WRITE(KULOUT,FMT=9303) KIERR
9303 FORMAT(' SUGOES: Error in NEWDATE', I10)
CALL ABORT3D
(KULOUT,'SUGOES ')
ENDIF
C
C* 3.1.0 On fixe le comdeck cominitrad
C . -------------------------------
C
NJULIAN = IJULIAN
NIYEAR = IYEAR
NMONTH = IMONTH
NIDAY = IDAY
C
C* 3.1.1 On fixe les parametres pour MSCFAST
C . -----------------------------------
CALL RTMSCGETPAR(JPPFGO,JPNL,JPNB,JPNLATO3,
x JPNLEVO3,JPNTEM,JPNGP1,
x NSATGO,NIDSATGO,LXACTGO,LTSTGO,
x LDBGGO,LRTNADIRGO,CRTMODLGO,NICLOUD,
x NIASSIM,NEMIFLAG,NIPSFLAG,NKBIAS,NIMODE,
x NKTUNE,NIB1,NIB2,IJULIAN,IYEAR,
x IMONTH,IDAY,NNGAS,NIGO)
C
C
C
C* 3.2 Boucle sur les satellites a traiter
C . -----------------------------------
DO JK = 1, NSATGO
C CDSATNAM = NIDSATGO(JK)
IF ( NIDSATGO(JK) .LT. 10 ) THEN
WRITE( CDUM, '(I1)' ) NIDSATGO(JK)
write(kulout,*) 'CDSATNUM = ',CDUM
CDSATNAM = 'GOES0' // CDUM
ELSE
WRITE( CDUM, '(I2)' ) NIDSATGO(JK)
write(kulout,*) 'CDSATNUM = ',CDUM
CDSATNAM = 'GOES' // CDUM
ENDIF
write(kulout,*) 'CDSATNAM = ',CDSATNAM
c
IF ( KIERR .NE. 0 ) THEN
WRITE(KULOUT,FMT=9301) KIERR
9301 FORMAT(' SUGOES: Error in RTMSCGETPAR', I10)
CALL ABORT3D
(KULOUT,'SUGOES ')
ENDIF
ENDDO
ENDIF
*
RETURN
END