[Dart-dev] DART/branches Revision: 11130

dart at ucar.edu dart at ucar.edu
Wed Feb 22 11:20:14 MST 2017


mizzi at ucar.edu
2017-02-22 11:20:13 -0700 (Wed, 22 Feb 2017)
34
Update WRF-Chem/DART repository.




Modified: DART/branches/mizzi/observations/MOPITT_CO/mopitt_ascii_to_obs.f90
===================================================================
--- DART/branches/mizzi/observations/MOPITT_CO/mopitt_ascii_to_obs.f90	2017-02-22 18:19:01 UTC (rev 11129)
+++ DART/branches/mizzi/observations/MOPITT_CO/mopitt_ascii_to_obs.f90	2017-02-22 18:20:13 UTC (rev 11130)
@@ -174,6 +174,7 @@
 character*4             :: chr_year
 character*129           :: filedir, filename, copy_meta_data, filen
 character*129           :: transform_typ
+character*129           :: MOPITT_CO_retrieval_type
 !
 ! QOR/CPSR variables
 integer                                        :: info,nlvls_trc,qstatus
@@ -187,8 +188,15 @@
 !
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !
-namelist /create_mopitt_obs_nml/filedir,filename,year,month,day,hour,bin_beg, bin_end
+! MOPITT_CO_retrieval_type:
+!     RAWR - retrievals in VMR (ppb) units
+!     RETR - retrievals in log10(VMR ([ ])) units
+!     QOR  - quasi-optimal retrievals
+!     CPSR - compact phase space retrievals
 !
+namelist /create_mopitt_obs_nml/filedir,filename,year,month,day,hour,bin_beg, bin_end, &
+         MOPITT_CO_retrieval_type
+!
 ! Set constants
 ln_10=log(10.)
 pi=4.*atan(1.)
@@ -543,8 +551,8 @@
         xg_lat(i,j)=xg_lat(i,j)/xg_twt(i,j)
 !
 ! Skip for SINGLE_CLUSTER   
-        if((xg_lon(i,j).lt.-97. .or. xg_lon(i,j).gt.-93.) .or. &
-           (xg_lat(i,j).lt.38.  .or. xg_lat(i,j).gt.42.)) cycle
+!        if((xg_lon(i,j).lt.-97. .or. xg_lon(i,j).gt.-93.) .or. &
+!           (xg_lat(i,j).lt.38.  .or. xg_lat(i,j).gt.42.)) cycle
 !
         do k=1,mop_dim
            if(xg_norm(i,j,k).eq.0) cycle
@@ -642,151 +650,323 @@
 !             print *, 'cov ',k,(xg_ret_cov(i,j,k,l),l=kstr,mop_dim)
 !           enddo
 !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! QOR CODE BLOCK
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+        if(trim(MOPITT_CO_retrieval_type) .eq. 'QOR') then
+!
+! Calculate SVD of ret_cov (Z=U_xxx * SV_xxx * VT_xxx)
+           allocate(Z(nlvls,nlvls),SV_cov(nlvls),SV(nlvls,nlvls))
+           allocate(U_cov(nlvls,nlvls),UT_cov(nlvls,nlvls),V_cov(nlvls,nlvls),VT_cov(nlvls,nlvls))
+           allocate(rs_avg_k(nlvls,nlvls),rs_cov(nlvls,nlvls),rs_x_r(nlvls),rs_x_p(nlvls))       
+           allocate(rr_avg_k(nlvls,nlvls),rr_cov(nlvls,nlvls),rr_x_r(nlvls),rr_x_p(nlvls))       
+           allocate(ZL(nlvls,nlvls),ZR(nlvls,nlvls),ZV(nlvls))
+           Z(1:nlvls,1:nlvls)=dble(xg_ret_cov(i,j,kstr:mop_dim,kstr:mop_dim))
+           call dgesvd('A','A',nlvls,nlvls,Z,nlvls,SV_cov,U_cov,nlvls,VT_cov,nlvls,wrk,lwrk,info)
+           nlvls_trc=0
+           do k=1,nlvls
+              if(SV_cov(k).ge.eps_tol) then
+                 nlvls_trc=k
+              else
+                 SV_cov(k)=0
+                 U_cov(:,k)=0. 
+                 VT_cov(k,:)=0.
+              endif 
+           enddo
+!              print *,'nlvls_trc ',nlvls_trc
+!              print *, 'SV ',SV_cov(:)
+!
+! Scale the singular vectors (NO SCALE/SCALE)     
+           do k=1,nlvls_trc
+              U_cov(:,k)=U_cov(:,k)/sqrt(SV_cov(k))
+           enddo
+!              print *, 'nlvls_trc ',nlvls_trc
+!              print *, 'SV ',SV_cov(:)
+!          
+           call mat_transpose(U_cov,UT_cov,nlvls,nlvls)
+           call mat_transpose(VT_cov,V_cov,nlvls,nlvls)
+           call vec_to_mat(SV_cov,SV,nlvls)
+!              do k=1,nlvls
+!                print *, 'U ',k,(U_cov(k,l),l=1,nlvls)
+!              enddo
+!              do k=1,nlvls
+!                print *, 'UT ',k,(UT_cov(k,l),l=1,nlvls)
+!              enddo
+!
+! Rotate terms in the forward operator
+           ZL(1:nlvls,1:nlvls)=dble(xg_avg_k(i,j,kstr:mop_dim,kstr:mop_dim))
+           call mat_prd(UT_cov(1:nlvls,1:nlvls),ZL(1:nlvls,1:nlvls), &
+           rs_avg_k(1:nlvls,1:nlvls),nlvls,nlvls,nlvls,nlvls)
+!              do k=1,nlvls
+!                print *, 'UT ',k,(UT_cov(k,l),l=1,nlvls)
+!              enddo
+!              do k=kstr,mop_dim
+!                print *, 'xg_avg_k ',k,(xg_avg_k(i,j,k,l),l=kstr,mop_dim)
+!              enddo
+!              do k=1,nlvls


More information about the Dart-dev mailing list