!-------------------------------------- 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 oda_Hgo 1,2
use modmask
, only : lmaskgo
#if defined (DOC)
*
* Purpose: Compute simulated GOES observations from profiled model increments.
* It returns Hdx in ROBDATA8(NCMOMA,*)
*
* Author : N. Wagneur *CMDA/MSC May 2001
*
* Revision:
* S. Pellerin *ARMA/SMC May 2000
* - Fix for F90 conversion
* S. Pellerin ARMA, January 2009
* - Rename the subroutine acording to ODA naming convention
* - Use of mask to process only assimilated data
* - Recoding to compute only Hdx instead of Jo=sum([Hdx-d]/sigma)
*
#endif
IMPLICIT NONE
*implicits
#include "comdim.cdk"
#include "comdimo.cdk"
#include "comoabdy.cdk"
#include "comoahdr.cdk"
#include "comoba.cdk"
#include "commvo.cdk"
#include "cparamgoes.cdk"
#include "comjacgoes.cdk"
*
REAL*8 PTBTL(JPNB,NOBGOES)
REAL*8 ZPS (NOBGOES)
REAL*8 ZTG (NOBGOES)
REAL*8 ZVLEV(NFLEV,NGOES)
REAL*8 ZT (NFLEV,NGOES)
REAL*8 ZLQ (NFLEV,NGOES)
REAL*8 DELX(2*(NFLEV+1),1)
REAL*8 JAC(JPNB,2*(NFLEV+1)),ZTBTL(JPNB,1)
C
INTEGER J, JCH, I, ISAT, JOFF, IO, JF, ISATON
INTEGER IBEGIN, IBEGINOB, ILAST, ILASTOB,IER
INTEGER K, NKX
INTEGER KNPF, KNCHPF, INCHPF
INTEGER JO, JDATA, IDATA, IDATEND, IDATYP
INTEGER JK, JN, ICHN, IPROCES, JL, INDX
INTEGER ILANSEA, INDXREG, INDXCLD, INUMCHN
INTEGER KLENPF,KNAV,KNSAV,KNSSV,KNCV
C
INTEGER KSURF(JPPFGO)
INTEGER KCHAN(JPCHPFGO),KPROF(JPCHPFGO)
INTEGER KCHNESDIS(JPCHPFGO)
INTEGER MFAIL(JPNB,NGOES),MDATA(JPNB,NGOES)
INTEGER IPTOBS(JPPFGO)
INTEGER IPTCHPF(JPPFGO,JPCHGO)
INTEGER IPTREG(JPPFGO)
INTEGER IPTCLD(JPPFGO)
INTEGER ISCANPOS(JPPFGO)
INTEGER ISATZEN(JPPFGO)
INTEGER INOBSCH(0:JPCHGO,JPNSATGO)
INTEGER IFAIL(JPPFGO,JPNSATGO)
C
INTEGER ISRCHEQ, MRFVOI, MRFCLS
EXTERNAL ISRCHEQ, MRFVOI, MRFCLS
EXTERNAL INITRT, SETRT
EXTERNAL LINTV2, EXTRAP
C
C* 1. Initialization
C . --------------
C
if(nobgoes.eq.0) return
C
C
C* 2. Computation of (HX - Z)/SIGMA for GOES data only
C . ------------------------------------------------
C
DO J = 1, NGOES
DO I = 1, JPNB
PTBTL(I,J) = 0.D0
ENDDO
ENDDO
C
C** Loop over all satellites specified by user
C
DO J = 1, NGOES
C
C
C* . 2.1 Extract general information for this observation point
C . ------------------------------------------------------
C
ZPS (J) = GOMPS(1,MJOGO(J))
ZTG (J) = GOMTGR(1,MJOGO(J))
DO I = 1, NFLEV
ZT (I,J) = GOMT(I,MJOGO(J))
ZLQ (I,J) = GOMQ(I,MJOGO(J))
ENDDO
enddo
C
C
C* . 2.6 Tangeant linear of RT model
C . ---------------------------
C
C* Multiplication de matrice (essayer MXMA8)
C* La temperature de brillance lineraire tangente :
C* TBTL = dTB/dX * DX ( ou HX par la suite )
C
C* Le a taille du vecteur d'etat X pour cet operateur est
C* deux fois le nombre de niveaux sur la grille d'analyse
C* pour T et q, plus un pour PS et un pour TG
C
NKX = 2 * (NFLEV+1)
C
DO J = 1, NGOES
DO K = 1, NFLEV
DELX(K,1) = ZT(K,J)
DELX(K+(NFLEV+1),1) = ZLQ(K,J)
ENDDO
DELX((NFLEV+1),1) = ZTG(J)
DELX(NKX,1) = ZPS(J)
DO K = 1, NKX
DO I = 1, JPNB
JAC(I,K) = HJACMSCFAST(J,K,I)
ENDDO
ENDDO
C
CALL MPROD2
(JAC,DELX,ZTBTL,JPNB,NKX,1,JPNB,NKX,JPNB)
DO I = 1, JPNB
PTBTL(I,J) = ZTBTL(I,1)
ENDDO
C
ENDDO
C
C* . 2.7 Extract GOES observations of clear radiance (brightness
c temps.)
C . ----------------------------------------------------------
c -----
C
DO J = 1, NGOES
DO I = 1, JPNB
MFAIL(I,J) = 1
MDATA(I,J) = 0
ENDDO
ENDDO
C
C* Boucle sur les Observations GOES dans le CMA
C
DO JN = 1, NGOES
IO = MJOGO(JN)
IDATA = MOBHDR(NCMRLN,IO)
IDATEND = MOBHDR(NCMNLV,IO)+IDATA - 1
C
C* Loop through data. Extract and store temporarily
c brightness temps.
C
DO JDATA = IDATA, IDATEND
if(lmaskgo(jdata)) then
ICHN = NINT(ROBDATA8(NCMPPP,JDATA))
MDATA (ICHN,JN) = JDATA
MFAIL (ICHN,JN) = 0
ENDIF
enddo
enddo
C
DO J = 1, NGOES
DO I = 1, JPNB
IF (MDATA(I,J) .NE. 0 ) THEN
ROBDATA8(NCMOMA,MDATA(I,J)) = PTBTL(I,J)
ENDIF
ENDDO
ENDDO
C
RETURN
END