175d174
<   use guess_grids, only : ges_no2
204c203
<     ges_v(1,1,1,it),ges_tv(1,1,1,it),ges_q(1,1,1,it),ges_oz(1,1,1,it),ges_no2(1,1,1,it),it,iret)
---
>     ges_v(1,1,1,it),ges_tv(1,1,1,it),ges_q(1,1,1,it),ges_oz(1,1,1,it),it,iret)
212c211
<   use mpimod, only : mpi_comm_world,mpi_integer4,mpi_real4,mpi_real8
---
>   use mpimod, only : mpi_comm_world,mpi_integer4,mpi_real4
219c218
<   real(r_kind), dimension(nlon_sfc,nlat_sfc,4) :: data2din
---
>   real(r_single), dimension(nlon_sfc,nlat_sfc,4) :: data2din
270c269
<         ierr=nf_get_var_double(ncidsfc,ivar(iv),data2din(1,1,iv))
---
>         ierr=nf_get_var_real(ncidsfc,ivar(iv),data2din(1,1,iv))
277c276
<       call mpi_bcast(data2din(1,1,iv),nlon_sfc*nlat_sfc,mpi_real8,0,mpi_comm_world,ierr)
---
>       call mpi_bcast(data2din(1,1,iv),nlon_sfc*nlat_sfc,mpi_real4,0,mpi_comm_world,ierr)
297,298c296,297
< subroutine get_raqms_netcdf(grd,filename,mype,g_z,g_ps,g_u,g_v,g_tv,g_q,g_oz,g_no2,it,iret_read)
< ! subroutine to read in raqms met and ozone now no2 also
---
> subroutine get_raqms_netcdf(grd,filename,mype,g_z,g_ps,g_u,g_v,g_tv,g_q,g_oz,it,iret_read)
> ! subroutine to read in raqms met and ozone
309,311d307
<   use raqmsmod, only : nameno2,raqmsno2,raqmsptrop
<   use ozinfo, only : ihave_oz
<   use no2info, only : ihave_no2
321d316
<   real(r_kind), dimension(grd%lat2,grd%lon2,grd%nsig), intent(out) :: g_no2
328c323
<   character *6 namesp,namesz,nameu,namev,nameq,nameptrop
---
>   character *6 namesp,namesz,nameu,namev,nameq
330d324
<   data nameptrop/'ptrop'/
333d326
<   real(r_kind), allocatable :: no2(:,:,:)
336c329
<   real(r_kind), allocatable :: sp(:,:),sz(:,:),ptrop(:,:)
---
>   real(r_kind), allocatable :: sp(:,:),sz(:,:)
339d331
<   real(r_kind), allocatable :: tempno2(:,:,:)
402d393
<     allocate (ptrop(nrraq,ncraq))
405d395
<     call readraqms2d(ncidraq,ptrop,nameptrop)
416,417d405
< !   #define DIAGOZONE
< #ifdef DIAGOZONE
421,424d408
<     if(.not.allocated(raqmsno2))then
<       allocate(raqmsno2(ncraq,nrraq,nlraq,nfldsig))
<     endif
< #endif
455d438
<     allocate (no2(nrraq,ncraq,nlraq))
459,462d441
<     if(ihave_no2)then
<       call readraqms3d(ncidraq,no2,nlraq,'ino2')
<     endif
<     if(ihave_oz)then
464d442
<     endif
469d446
<     if(ihave_no2.and.ihave_oz)then
476,478d452
<             no2(j,i,k)=no2(j,i,k)*(46.0055/28.97) ! convert vmr to no2 mixing ratio !  
< #ifdef DIAGOZONE
<             raqmsno2(i,j,k,it)=no2(j,i,k)
480,494d453
< #endif
<           end do
<         end do
<       end do
<     elseif(ihave_no2)then
<       do k=1,nlraq
<         do i=1,ncraq
<           do j=1,nrraq
<             q(j,i,k)=max(qmin,q(j,i,k))
<             tv(j,i,k)=t(j,i,k)*(one+fv*q(j,i,k))
< !            oz(j,i,k)=oz(j,i,k)*(47.98/28.97) ! convert vmr to mixing ratio !  close to 1/constoz time 1.e6
<             no2(j,i,k)=no2(j,i,k)*(46.0055/28.97) ! convert vmr to no2 mixing ratio !  
< #ifdef DIAGOZONE
<             raqmsno2(i,j,k,it)=no2(j,i,k)
< #endif
498,511d456
<     else
<       do k=1,nlraq
<         do i=1,ncraq
<           do j=1,nrraq
<             q(j,i,k)=max(qmin,q(j,i,k))
<             tv(j,i,k)=t(j,i,k)*(one+fv*q(j,i,k))
<             oz(j,i,k)=oz(j,i,k)*(47.98/28.97) ! convert vmr to mixing ratio !  close to 1/constoz time 1.e6
< #ifdef DIAGOZONE
<             raqmsoz(i,j,k,it)=oz(j,i,k)
< #endif
<           end do
<         end do
<       end do
<     endif
519,520d463
<     allocate (no2(1,1,1))
<     allocate (ptrop(1,1))
540,541d482
<   if(.not.allocated(raqmsptrop))allocate (raqmsptrop(grd%lat2,grd%lon2))
< !   write(500+mype,*)'shape raqmsptrop',shape(raqmsptrop)
685d625
<   call scat2d(ptrop,raqmsptrop)
690d629
<   if(ihave_oz)then
692,695d630
<   endif
<   if(ihave_no2)then
<     call scat3d(no2,g_no2)
<   endif
927d861
< use raqmsmod, only : raqmsno2,nameno2
929d862
< use guess_grids, only : ges_no2
932,934c865
< use mpimod, only : mpi_comm_world,mpi_integer4,mpi_real4,mpi_rtype,mpi_real8
< use ozinfo, only : ihave_oz
< use no2info, only : ihave_no2
---
> use mpimod, only : mpi_comm_world,mpi_integer4,mpi_real4,mpi_rtype
938,940c869,871
<   real(r_kind), dimension(lat1*lon1,nsig) :: ozsm,no2sm
<   real(r_kind), dimension(max(iglobal,itotsub)) :: work,workno2
<   real(r_kind), dimension(nlon,nlat) :: gridoz,gridno2
---
>   real(r_kind), dimension(lat1*lon1,nsig) :: ozsm
>   real(r_kind), dimension(max(iglobal,itotsub)) :: work
>   real(r_kind), dimension(nlon,nlat) :: gridoz
942,943c873
<   real(r_kind), dimension(nlon,nlat,nsig) :: newno2,diffno2
<   integer(i_kind) k,ierror,i,j,idoz,ierr,kk,ncidraq,idno2
---
>   integer(i_kind) k,ierror,i,j,idoz,ierr,kk,ncidraq
948d877
<   call strip(ges_no2(1,1,1,nfldsig),no2sm,nsig)
955,956d883
<     workno2=0.0
<     if(ihave_oz)then
960,965d886
<     endif
<     if(ihave_no2)then
<       call mpi_gatherv(no2sm(1,k),ijn(mm1),mpi_rtype, &
<       workno2,ijn,displs_g,mpi_rtype, &
<       0,mpi_comm_world,ierror)
<     endif
969d889
<       if(ihave_oz)then
971,974d890
<       endif
<       if(ihave_no2)then
<         call reorderraqms(workno2,gridno2)
<       endif
976,1000d891
<       if(ihave_no2)then
< !        write(6,*)'begin out output newno2 nlon',nlon,nlat
< !        call flush(6)
<         do j=1,nlat
<           do i=1,nlon
<             newno2(i,j,kk)=gridno2(i,j)
< #ifdef DIAGOZONE
<             if(i.eq.62.and.j.eq.27)then
<               write(6,*)'i',i,j,kk,'nfldsig',nfldsig,'k',k,'nsig',nsig
<               call flush(6)
<               write(6,*)'newno2',newno2(i,j,kk)
<               call flush(6)
<               write(6,*)'old',raqmsno2(i,j,k,nfldsig)
<               call flush(6)
<                write(6,*)'diffno2 62,27',newno2(i,j,kk)-raqmsno2(i,j,k,nfldsig),'newno2',&
<                 newno2(i,j,kk),'old',raqmsno2(i,j,k,nfldsig),'ppv',newno2(i,j,kk)*28.97/46.0055
<               call flush(6)
<             endif
<             diffno2(i,j,k)=newno2(i,j,kk)-raqmsno2(i,j,k,nfldsig)
< #endif
<             newno2(i,j,kk)=newno2(i,j,kk)*28.97/46.0055
<           end do
<         end do
<       endif
<       if(ihave_oz)then
1004d894
< #ifdef DIAGOZONE
1006d895
< #endif
1008,1011d896
<           end do
<         end do
<       endif
< #ifdef DIAGOZONE
1014a900,901
>         end do
>       end do
1016d902
< #endif
1021,1023c907
<     write(6,*)'ajl find nldsig',nfldsig,'ncidraq',ncidraq,'ncidraqd',ncidraqd
<     call flush(6)
<     if(ihave_oz)then
---
> !    write(6,*)'ajl find nldsig',nfldsig,'ncidraq',ncidraq,'ncidraqd',ncidraqd
1029c913
<       write(6,*)'newoz',maxval(newoz),minval(newoz)
---
> !    write(6,*)'newoz',maxval(newoz),minval(newoz)
1034,1048d917
<     endif
<     if(ihave_no2)then
<       ierr=nf_inq_varid(ncidraq,nameno2,idno2)
< !    write(6,*)'idoz',idoz
<       if(ierr /= NF_NOERR)then
<         write(6,*)'error varid ',nameno2,nf_strerror(ierr)
<       endif
< !      write(6,*)'newoz',maxval(newoz),minval(newoz)
<       ierr=nf_put_var_double(ncidraq,idno2,newno2)
<       if(ierr /= NF_NOERR)then
<         write(6,*)'error write ',nameno2,nf_strerror(ierr)
<       endif
<       write(6,*)'newno2',maxval(newno2),minval(newno2)
<       call flush(6)
<      endif
1260c1129
< subroutine omiadjust(xdata1,rrlat,dpoz,dp,sfcp)
---
> subroutine omiadjust(xdata1,rrlat,dpoz,dp,sfcp,omiapriori,layeff)
1267a1137
>   real(r_kind),dimension(11) :: omiapriori,layeff
1360c1230,1232
<     intapr(ll)=intapr(ll+1)+apr(ll)
---
> !    intapr(ll)=intapr(ll+1)+apr(ll)
>     intapr(ll)=intapr(ll+1)+omiapriori(ll)
> !    write(930+mype,*)ll,'apr',apr(ll),omiapriori(ll),' prse ',aprprs(ll),' apreff ',apreff(ll),layeff(ll)
1362c1234,1235
<   intapr(0)=intapr(1)+apr(1)
---
> !  intapr(0)=intapr(1)+apr(1)
>   intapr(0)=intapr(1)+omiapriori(1)
1367c1240,1241
<     if(psav(llev).lt.aprprs(nprs))eff(llev)=apreff(nprs)
---
> !    if(psav(llev).lt.aprprs(nprs))eff(llev)=apreff(nprs)
>     if(psav(llev).lt.aprprs(nprs))eff(llev)=layeff(nprs)
1371c1245,1246
<         eff(llev)=apreff(ll+1)+pscale*(apreff(ll)-apreff(ll+1))
---
> !        eff(llev)=apreff(ll+1)+pscale*(apreff(ll)-apreff(ll+1))
>         eff(llev)=layeff(ll+1)+pscale*(layeff(ll)-layeff(ll+1))
1374c1249,1250
<     if(psav(llev).gt.aprprs(1))eff(llev)=apreff(1)
---
> !    if(psav(llev).gt.aprprs(1))eff(llev)=apreff(1)
>     if(psav(llev).gt.aprprs(1))eff(llev)=layeff(1)
1396a1273
>             write(6,*)'praqbot',praqbot,praqtop,'pintapr',pintapr(iaprlev:iaprlev+1)
1480d1356
<   xdata2=0.0 ! ajl added 9/6/2015
1501,1783d1376
< subroutine intrp3no2dp1(f,dpno2,dx,dy,obstime,mype)
< !$$$  subprogram documentation block
< !                .      .    .                                       .
< ! subprogram:    intrp3oz    space-time linear interpolation for ozone
< !   prgmmr: parrish          org: np22                date: 2013-01-26
< !  dpno2(k) for omi apriori adjustment Lenzen 2015-05-10
< !
< ! abstract: same as intrp3oz but for special case n=1, with n argument removed.
< !            This has been created to solve problem of type mismatch debug
< !            compile
< !            error on WCOSS.
< !
< ! program history log:
< !   2013-01-26  parrish
< !
< !   input argument list:
< !     f        - input interpolator (gridded guess ozone fields)
< !     dx,dy - input x,y-coords of interpolation points (grid units)
< !     obstime  - observation times
< !     mype     - mpi task id
< !
< !   output argument list:
< !     g        - output interpolatees (guess ozone at observation location)
< !     dpno2     - delta pressure * layer ozone at observation location
< !     sfcp     - surface pressure at observation location
< !
< ! attributes:
< !   language: f90
< !   machine:  ibm RS/6000 SP
< !
< !$$$
< !--------
<   use kinds, only: r_kind,i_kind
<   use guess_grids, only: nfldsig,hrdifsig,ges_prsi
<   use gridmod, only: lat2,lon2,nlat,nlon,nsig,lon1,istart,jstart
<   use constants, only: zero, one, rno2con
<   implicit none
< 
< ! Declare passed variables
<   integer(i_kind)                               ,intent(in   ) :: mype
<   real(r_kind)                                  ,intent(in   ) :: dx,dy,obstime
<   real(r_kind),dimension(lat2,lon2,nsig,nfldsig),intent(in   ) :: f
< !  real(r_kind)                                  ,intent(  out) :: g
<   real(r_kind),dimension(nsig)                 ,intent(out)    :: dpno2
<   
< 
< ! Declare local variables
<   integer(i_kind) j,k,ix,ix1,iy,iy1,kk,itsig,itsigp,iz1,iz2
<   integer(i_kind) ixp,iyp,mm1
<   real(r_kind) w00,w01,w10,w11,delx,dely,delx1,dely1
<   real(r_kind) dtsig,dtsigp,pob
<   real(r_kind) delp1,delp2,delp3,delp4,delp5,delp6,delp7,delp8
< 
< 
< !*************************************************************************
< ! Initialize variables
< !  g=zero
< !  dp=zero
<   dpno2=zero
< !  sfcp=zero
<   mm1=mype+1
< 
< 
< ! Loop over number of observations.
< 
< !    Get horizontal interpolation information.  This information includes
< !    the (i,j) indices of the grid points surrounding the observation,
< !    plus the corresponding interpolation weights between these points
< !    and the observation.
< 
<      ix1=dx; iy1=dy
<      ix1=max(1,min(ix1,nlat))
<      delx=dx-ix1; dely=dy-iy1; delx=max(zero,min(delx,one))
<      ix=ix1-istart(mm1)+2; iy=iy1-jstart(mm1)+2
<      if(iy<1) then
<         iy1=iy1+nlon
<         iy=iy1-jstart(mm1)+2
<      end if
<      if(iy>lon1+1) then
<         iy1=iy1-nlon
<         iy=iy1-jstart(mm1)+2
<      end if
<      ixp=ix+1; iyp=iy+1
<      if(ix1==nlat) then
<         ixp=ix
<      end if
<      delx1=one-delx; dely1=one-dely
<      w00=delx1*dely1; w10=delx*dely1; w01=delx1*dely; w11=delx*dely
<         
< !    Set the weights for linear time iterpolation from the guess to 
< !    the observation time.
< !     if(mype.eq.0)then
< !          write(6,*)'obstime',obstime,'hrdiffsig',hrdifsig,'nfldsig',nfldsig
< !           call flush(6)
< !     endif
< 
<      if(obstime > hrdifsig(1) .and. obstime < hrdifsig(nfldsig))then
<         do j=1,nfldsig-1
<            if(obstime > hrdifsig(j) .and. obstime <= hrdifsig(j+1))then
<               itsig=j
<               itsigp=j+1
<               dtsig=((hrdifsig(j+1)-obstime)/(hrdifsig(j+1)-hrdifsig(j)))
<            end if
<         end do
<      else if(obstime <=hrdifsig(1))then
<         itsig=1
<         itsigp=1
<         dtsig=one
<      else
<         itsig=nfldsig
<         itsigp=nfldsig
<         dtsig=one
<      end if
<      dtsigp=one-dtsig
<      
< !
< !    Perform spatial and temporal interpolation for the total column 
< !    ozone observation
< !     write(100+mype,*)'ix',ix,iy,itsig,itsigp,'prsi',ges_prsi(ix,iy,1,itsig),ges_prsi(ix,iy,nsig,itsig)
<      do kk=1,nsig
<         delp1=ges_prsi(ix ,iy ,kk,itsig )-ges_prsi(ix ,iy ,kk+1,itsig )
<         delp2=ges_prsi(ixp,iy ,kk,itsig )-ges_prsi(ixp,iy ,kk+1,itsig )
<         delp3=ges_prsi(ix ,iyp,kk,itsig )-ges_prsi(ix ,iyp,kk+1,itsig )
<         delp4=ges_prsi(ixp,iyp,kk,itsig )-ges_prsi(ixp,iyp,kk+1,itsig )
<         delp5=ges_prsi(ix ,iy ,kk,itsigp)-ges_prsi(ix ,iy ,kk+1,itsigp)
<         delp6=ges_prsi(ixp,iy ,kk,itsigp)-ges_prsi(ixp,iy ,kk+1,itsigp)
<         delp7=ges_prsi(ix ,iyp,kk,itsigp)-ges_prsi(ix ,iyp,kk+1,itsigp)
<         delp8=ges_prsi(ixp,iyp,kk,itsigp)-ges_prsi(ixp,iyp,kk+1,itsigp)
< !        dp(kk)=dp(kk)+(w00*delp1+w10*delp2+w01*delp3+w11*delp4)*dtsig + &
< !                      (w00*delp5+w10*delp6+w01*delp7+w11*delp8)*dtsigp
<         dpno2(kk)=dpno2(kk)+ &
<               (f(ix ,iy ,kk,itsig )*w00*delp1 &
<              + f(ixp,iy ,kk,itsig )*w10*delp2 &
<              + f(ix ,iyp,kk,itsig )*w01*delp3 &
<              + f(ixp,iyp,kk,itsig )*w11*delp4)*dtsig + &
<               (f(ix ,iy ,kk,itsigp)*w00*delp5 &
<              + f(ixp,iy ,kk,itsigp)*w10*delp6 &
<              + f(ix ,iyp,kk,itsigp)*w01*delp7 &
<              + f(ixp,iyp,kk,itsigp)*w11*delp8)*dtsigp
<         dpno2(kk)=dpno2(kk)*rno2con
<      enddo
< !     write(500+mype,*)'bottom intrp3no2dp1'
< !     call flush(500+mype)
< 
< ! End of routine
<   return
< end subroutine intrp3no2dp1
< subroutine raqmsno2col(dpno2,no2ges,mype,ptrop,prsitmp,scatwt,amf,nsig,ntrop,scatwtmodel)
<   use kinds, only: r_kind,i_kind
<   use omimod, only : nlevscatwt,presscatwt,pintscatwt,pintscatwtcb
<   use raqmsmod, only : latob,lonob
<   implicit none
<   integer(i_kind)                               ,intent(in   ) :: mype
<   integer(i_kind)                               ,intent(in   ) :: nsig
<   real(r_kind), dimension(nlevscatwt) , intent(in) :: scatwt
<   real(r_kind)                    ,intent(in)  :: amf
< ! dpno2 in millidobson
<   real(r_kind),dimension(nsig)                 ,intent(in)    :: dpno2
<   real(r_kind)                                 ,intent(out)   :: no2ges
< ! ptrop in mb
<   real(r_kind)                                 ,intent(in)    :: ptrop
< ! prsitmp in cb
<   real(r_kind),dimension(0:nsig)               ,intent(in)    :: prsitmp
<   real(r_kind),dimension(0:nlevscatwt)            :: aintscatwt
<   real(r_kind), dimension(0:nsig)      :: aintscatwtmodel
<   real(r_kind), dimension(nsig)    ,intent(out)    :: scatwtmodel
<   real(r_kind)                         :: ptropcb,af,prskk
<   integer(i_kind)                :: ntop,ntrop,k,kk,kbot
<   integer entry
<   data entry/0/
<   save entry
<   entry=entry+1
<   
< ! need to integrate scatterweight
<   aintscatwt(0)=0.
< ! need to find aintscatwt at model interfaces
< ! need to find which layer ptrop is in
<   ptropcb=ptrop/10.
< ! need highest model layer containing ptrop
<   ntrop=nsig
< !  write(540+mype,*)'prsitmp sfc',prsitmp(0)
<   do k=nsig,1,-1
< !    write(540+mype,*)k,'ptropcb',ptropcb,'prsitmp',k-1,prsitmp(k-1),'ptrop',ptrop,'prsitmpk',prsitmp(k)
<     if(ptropcb<prsitmp(k-1))then
< !    if(ptropcb>=prsitmp(k).and.ptropcb<prsitmp(k-1))then
< !     so prsitmp(ntrop) is highest model interface need pintscalwtcb to bracket
< !     it so can interp to it
<       ntrop=k
<       exit ! since not bracket any more
<     end if
<   end do
<   ntop=nlevscatwt
<   do k=nlevscatwt,1,-1
< !    if(prsitmp(ntrop)<=pintscatwt(k))then
<     if(prsitmp(ntrop)<pintscatwt(k-1))then
<       ntop=k
< !      ntop=k+1
<       exit
<     endif
<   end do
<   do k=1,ntop
<     aintscatwt(k)=aintscatwt(k-1)+scatwt(k)*(pintscatwtcb(k-1)-pintscatwtcb(k))
< !    if(entry<10)then
< !      write(540+mype,*)k,'aintscatwt',aintscatwt(k),'scatwt',scatwt(k),'pint',pintscatwtcb(k)
< !    endif
<   end do
< !    if(entry<10)then
<       !write(540+mype,*)'ntop',ntop,'ntrop',ntrop
<     !endif
< ! in between pintscatwt(ntop) and pintscatwt(ntop+1)
< ! find index for aintscatwt on pintscatwt
<   kbot=1
<   do kk=0,ntrop
< LP: do k=kbot,ntop
< !      if(kk.eq.ntrop)then
< !        !write(540+mype,*)'kk',kk,'prsitmp',prsitmp(kk)
< !        !write(540+mype,*)'k ',k-1,k,pintscatwtcb(k-1:k),'kbot',kbot,'ntop',ntop
< !      endif
<       if(kk.eq.ntrop)then
<         prskk=ptropcb
<       else
<         prskk=prsitmp(kk)
<       endif
< !      if(prsitmp(kk)<pintscatwtcb(k-1).and.prsitmp(kk)>pintscatwtcb(k))then
<       if(prskk<pintscatwtcb(k-1).and.prskk>pintscatwtcb(k))then
< !        kint(kk)=k
< !        if(kk.eq.ntrop)then
< !          af=(max(ptropcb,prsitmp(kk))-pintscatwtcb(k))/ &
<           !(pintscatwtcb(k-1)-pintscatwtcb(k))
< !          write(540+mype,*)k,'aftrop',af,'ptropcb',ptropcb,pintscatwtcb(k-1:k)
< !          write(540+mype,*)'ntop',ntop,'ntrop',ntrop,'prsitmp',prsitmp(kk-1:kk+1)
< !          write(540+mype,*)'aintscatwt',k-1,k,aintscatwt(k-1:k)
< !        else
<           af=(prskk-pintscatwtcb(k))/ &
<           (pintscatwtcb(k-1)-pintscatwtcb(k))
< !        endif
<         if(af<0.0.or.af>1.000)then
<           write(540+mype,*)'af out of bounds kk',kk,'ntrop',ntrop,'k',k, &
<           'ptropcb',ptropcb,'pintscatwtcb',k,pintscatwtcb(k-1:k),'prsitmp',kk,prsitmp(kk)
<         endif
<         aintscatwtmodel(kk)=aintscatwt(k-1)*af+aintscatwt(k)*(1.-af)
<         kbot=k
<         exit LP
<       endif 
<     end do LP
<   end do
< !  write(540+mype,*)'amf',amf
<   do k=1,ntrop
<     scatwtmodel(k)=(aintscatwtmodel(k)-aintscatwtmodel(k-1))/ &
< !      (prsitmp(k-1)-prsitmp(k))/amf
<       (prsitmp(k-1)-prsitmp(k))
< !     this adjusts for fact use smaller deltap for top layer add /amf so get a
< !     normalized wt
< !    write(540+mype,*)'scatwtmodel',k,scatwtmodel(k), 'scaled',scatwtmodel(k)/amf, &
< !    .5*(prsitmp(k)+prsitmp(k-1))*10.,'aintscatwtmodel',aintscatwtmodel(k-1:k)
<     scatwtmodel(k)=scatwtmodel(k)/amf
<   end do
<   no2ges=0.0
<   do k=1,ntrop
<     if(k.eq.ntrop)then
< !     only part of layer ?
< !      if(entry<10)then
< !        write(580+mype,*)'ptropcb',ptropcb,prsitmp(k-1:k)
< !      endif
<       
<       no2ges=no2ges+scatwtmodel(k)*dpno2(k)
<     else
<       no2ges=no2ges+scatwtmodel(k)*dpno2(k)
<     endif
< !    if(entry<10)then
< !      write(580+mype,*)k,'scatwtmodel',scatwtmodel(k),'dpno2',dpno2(k)
< !    endif
<   end do
<   if(no2ges>3000.)then
<     write(580+mype,*)latob,lonob,'no2ges',no2ges,'ntrop',ntrop
<     do k=1,ntrop
<       write(580+mype,*)k,scatwtmodel(k),dpno2(k)
<     end do
<     call flush(580+mype)
<   endif
< !  no2ges=no2ges/amf
<   return
< end subroutine raqmsno2col
