SUBROUTINE GDTOMVOAD 1 * #if defined (DOC) * ***s/r GDTOMVOAD- Adjoint of the observation operator with observations * located at each analysis grid point (special case of BILINAD) * *Author : Mark Buehner October, 1998 * *Revision: * Y. Yang Sep. 2004 * - Added include "comchem.cdk" * - Added loops for species * Y. Yang Feb. 2005 * - Removed 'OZ' part * ** Purpose: The Adjoint of GDTOMVO * * #endif IMPLICIT NONE *implicits #include "pardim.cdk"
#include "comdim.cdk"
#include "comdimo.cdk"
#include "comleg.cdk"
#include "comgem.cdk"
#include "comchem.cdk"
#include "comgd0.cdk"
#include "commvo.cdk"
#include "comstate.cdk"
* INTEGER JLEV, JGL, JLON, JOBS, JK INTEGER ILON, ILOS, ILA, IMAX INTEGER JJ, NLEV C C* 0. PUT TO ZERO EXTRA ROWS IN GRAD TABLES C ---------------------------------------- C CALL TRANSFER('ZGD0') C C* 2. LOOP OVER ALL THE OBSERVATIONS C --------------------------------- JOBS=0 IMAX = NILON(1) DO ILON = 1, IMAX DO ILA = 1, NJ JOBS=JOBS+1 DO JK = 1, nflev if(NGEXIST(nguu).eq.1) then ut0(ILON,JK,ILA) = gomu(JK,JOBS) endif if(NGEXIST(ngvv).eq.1) then vt0(ILON,JK,ILA) = gomv(JK,JOBS) endif if(NGEXIST(ngq).eq.1) then q0(ILON,JK,ILA) = gomq(JK,JOBS) endif if(NGEXIST(nggz).eq.1) then gz0(ILON,JK,ILA) = gomgz(JK,JOBS) endif if(NGEXIST(ngtt).eq.1) then tt0(ILON,JK,ILA) = gomt(JK,JOBS) endif do jj = 1, NGCMT if(NGEXIST(ngtr(jj)).eq.1) then nlev = (jj-1)*nflev + jk gtr0(ILON,NLEV,ILA) = gomtr(NLEV,JOBS) endif end do enddo if(NGEXIST(ngps).eq.1) then gps0(ILON,1,ILA) = gomps(1,JOBS) endif enddo enddo C C 1.0 TRANSFORM PHYSICAL GRADIENTS INTO COVARIANTS C DO JLEV = 1, NFLEV DO JGL = 1, NJ IMAX = NILON(JGL) DO JLON = 1, IMAX UT0(JLON,JLEV,JGL) = UT0(JLON,JLEV,JGL) * CONPHY(JGL) VT0(JLON,JLEV,JGL) = VT0(JLON,JLEV,JGL) * CONPHY(JGL) ENDDO ENDDO ENDDO C DO JLEV = 1, NKGDIM DO JGL = 1, NJ IMAX = NILON(JGL) DO JLON = 1, IMAX GD(JLON,JLEV,JGL) = GD(JLON,JLEV,JGL) * + NILON(JGL) / RWT(JGL) ENDDO ENDDO ENDDO C RETURN END