Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/concoutput_nest.f90

    r36 r4  
    11!**********************************************************************
    2 ! Copyright 1998-2015                                                 *
     2! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010         *
    33! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa,             *
    44! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann   *
     
    4545  !                                                                            *
    4646  !     2008 new sparse matrix format                                          *
    47   !     PS, 2/2015: option to produce incremental deposition output
    48   !                 access= -> position=
    4947  !                                                                            *
    5048  !*****************************************************************************
     
    114112
    115113
    116   if (ldirect.eq.1) then
    117     do ks=1,nspec
    118       do kp=1,maxpointspec_act
    119         tot_mu(ks,kp)=1
     114    if (ldirect.eq.1) then
     115       do ks=1,nspec
     116         do kp=1,maxpointspec_act
     117           tot_mu(ks,kp)=1
     118         end do
     119       end do
     120   else
     121      do ks=1,nspec
     122             do kp=1,maxpointspec_act
     123               tot_mu(ks,kp)=xmass(kp,ks)
     124             end do
    120125      end do
    121     end do
    122   else
    123     do ks=1,nspec
    124       do kp=1,maxpointspec_act
    125         tot_mu(ks,kp)=xmass(kp,ks)
    126       end do
    127     end do
    128   endif
     126    endif
    129127
    130128
     
    164162  end do
    165163
    166   do i=1,numreceptor
    167     xl=xreceptor(i)
    168     yl=yreceptor(i)
    169     iix=max(min(nint(xl),nxmin1),0)
    170     jjy=max(min(nint(yl),nymin1),0)
    171     densityoutrecept(i)=rho(iix,jjy,1,2)
    172   end do
    173 
    174 
    175 ! Output is different for forward and backward simulations
    176   do kz=1,numzgrid
    177     do jy=0,numygridn-1
    178       do ix=0,numxgridn-1
    179         if (ldirect.eq.1) then
    180           factor3d(ix,jy,kz)=1.e12/volumen(ix,jy,kz)/outnum
    181         else
    182           factor3d(ix,jy,kz)=real(abs(loutaver))/outnum
    183         endif
     164    do i=1,numreceptor
     165      xl=xreceptor(i)
     166      yl=yreceptor(i)
     167      iix=max(min(nint(xl),nxmin1),0)
     168      jjy=max(min(nint(yl),nymin1),0)
     169      densityoutrecept(i)=rho(iix,jjy,1,2)
     170    end do
     171
     172
     173  ! Output is different for forward and backward simulations
     174    do kz=1,numzgrid
     175      do jy=0,numygridn-1
     176        do ix=0,numxgridn-1
     177          if (ldirect.eq.1) then
     178            factor3d(ix,jy,kz)=1.e12/volumen(ix,jy,kz)/outnum
     179          else
     180            factor3d(ix,jy,kz)=real(abs(loutaver))/outnum
     181          endif
     182        end do
    184183      end do
    185184    end do
    186   end do
    187185
    188186  !*********************************************************************
     
    193191  do ks=1,nspec
    194192
    195     write(anspec,'(i3.3)') ks
    196     if ((iout.eq.1).or.(iout.eq.3).or.(iout.eq.5)) then
    197       if (ldirect.eq.1) then
    198         open(unitoutgrid,file=path(2)(1:length(2))//'grid_conc_nest_' &
    199              //adate// atime//'_'//anspec,form='unformatted')
    200       else
    201         open(unitoutgrid,file=path(2)(1:length(2))//'grid_time_nest_' &
    202              //adate// atime//'_'//anspec,form='unformatted')
    203       endif
    204        write(unitoutgrid) itime
    205      endif
    206 
    207     if ((iout.eq.2).or.(iout.eq.3)) then      ! mixing ratio
    208      open(unitoutgridppt,file=path(2)(1:length(2))//'grid_pptv_nest_' &
    209           //adate// atime//'_'//anspec,form='unformatted')
    210 
    211       write(unitoutgridppt) itime
     193  write(anspec,'(i3.3)') ks
     194  if ((iout.eq.1).or.(iout.eq.3).or.(iout.eq.5)) then
     195    if (ldirect.eq.1) then
     196      open(unitoutgrid,file=path(2)(1:length(2))//'grid_conc_nest_' &
     197           //adate// &
     198           atime//'_'//anspec,form='unformatted')
     199    else
     200      open(unitoutgrid,file=path(2)(1:length(2))//'grid_time_nest_' &
     201           //adate// &
     202           atime//'_'//anspec,form='unformatted')
    212203    endif
    213 
    214     do kp=1,maxpointspec_act
    215     do nage=1,nageclass
    216 
    217       do jy=0,numygridn-1
    218         do ix=0,numxgridn-1
    219 
    220     ! WET DEPOSITION
    221           if ((WETDEP).and.(ldirect.gt.0)) then
     204     write(unitoutgrid) itime
     205   endif
     206
     207  if ((iout.eq.2).or.(iout.eq.3)) then      ! mixing ratio
     208   open(unitoutgridppt,file=path(2)(1:length(2))//'grid_pptv_nest_' &
     209        //adate// &
     210        atime//'_'//anspec,form='unformatted')
     211
     212    write(unitoutgridppt) itime
     213  endif
     214
     215  do kp=1,maxpointspec_act
     216  do nage=1,nageclass
     217
     218    do jy=0,numygridn-1
     219      do ix=0,numxgridn-1
     220
     221  ! WET DEPOSITION
     222        if ((WETDEP).and.(ldirect.gt.0)) then
    222223            do l=1,nclassunc
    223224              auxgrid(l)=wetgriduncn(ix,jy,ks,kp,l,nage)
    224225            end do
    225             call mean(auxgrid,wetgrid(ix,jy), wetgridsigma(ix,jy),nclassunc)
    226     ! Multiply by number of classes to get total concentration
    227             wetgrid(ix,jy)=wetgrid(ix,jy)*nclassunc
    228     ! Calculate standard deviation of the mean
    229             wetgridsigma(ix,jy)= wetgridsigma(ix,jy)* sqrt(real(nclassunc))
    230           endif
    231 
    232     ! DRY DEPOSITION
    233           if ((DRYDEP).and.(ldirect.gt.0)) then
     226            call mean(auxgrid,wetgrid(ix,jy), &
     227                 wetgridsigma(ix,jy),nclassunc)
     228  ! Multiply by number of classes to get total concentration
     229            wetgrid(ix,jy)=wetgrid(ix,jy) &
     230                 *nclassunc
     231  ! Calculate standard deviation of the mean
     232            wetgridsigma(ix,jy)= &
     233                 wetgridsigma(ix,jy)* &
     234                 sqrt(real(nclassunc))
     235        endif
     236
     237  ! DRY DEPOSITION
     238        if ((DRYDEP).and.(ldirect.gt.0)) then
    234239            do l=1,nclassunc
    235240              auxgrid(l)=drygriduncn(ix,jy,ks,kp,l,nage)
    236241            end do
    237             call mean(auxgrid,drygrid(ix,jy), drygridsigma(ix,jy),nclassunc)
    238     ! Multiply by number of classes to get total concentration
    239             drygrid(ix,jy)=drygrid(ix,jy)* nclassunc
    240     ! Calculate standard deviation of the mean
    241             drygridsigma(ix,jy)= drygridsigma(ix,jy)* sqrt(real(nclassunc))
    242           endif
    243 
    244     ! CONCENTRATION OR MIXING RATIO
    245           do kz=1,numzgrid
     242            call mean(auxgrid,drygrid(ix,jy), &
     243                 drygridsigma(ix,jy),nclassunc)
     244  ! Multiply by number of classes to get total concentration
     245            drygrid(ix,jy)=drygrid(ix,jy)* &
     246                 nclassunc
     247  ! Calculate standard deviation of the mean
     248            drygridsigma(ix,jy)= &
     249                 drygridsigma(ix,jy)* &
     250                 sqrt(real(nclassunc))
     251        endif
     252
     253  ! CONCENTRATION OR MIXING RATIO
     254        do kz=1,numzgrid
    246255            do l=1,nclassunc
    247256              auxgrid(l)=griduncn(ix,jy,kz,ks,kp,l,nage)
    248257            end do
    249             call mean(auxgrid,grid(ix,jy,kz), gridsigma(ix,jy,kz),nclassunc)
    250     ! Multiply by number of classes to get total concentration
    251             grid(ix,jy,kz)= grid(ix,jy,kz)*nclassunc
    252     ! Calculate standard deviation of the mean
    253             gridsigma(ix,jy,kz)= gridsigma(ix,jy,kz)* sqrt(real(nclassunc))
    254           end do
     258            call mean(auxgrid,grid(ix,jy,kz), &
     259                 gridsigma(ix,jy,kz),nclassunc)
     260  ! Multiply by number of classes to get total concentration
     261            grid(ix,jy,kz)= &
     262                 grid(ix,jy,kz)*nclassunc
     263  ! Calculate standard deviation of the mean
     264            gridsigma(ix,jy,kz)= &
     265                 gridsigma(ix,jy,kz)* &
     266                 sqrt(real(nclassunc))
    255267        end do
    256268      end do
    257 
    258 
    259     !*******************************************************************
    260     ! Generate output: may be in concentration (ng/m3) or in mixing
    261     ! ratio (ppt) or both
    262     ! Output the position and the values alternated multiplied by
    263     ! 1 or -1, first line is number of values, number of positions
    264     ! For backward simulations, the unit is seconds, stored in grid_time
    265     !*******************************************************************
    266 
    267     ! Concentration output
    268     !*********************
    269     if ((iout.eq.1).or.(iout.eq.3).or.(iout.eq.5)) then
    270 
    271     ! Wet deposition
    272       sp_count_i=0
    273       sp_count_r=0
    274       sp_fact=-1.
    275       sp_zer=.true.
    276       if ((ldirect.eq.1).and.(WETDEP)) then
    277       do jy=0,numygridn-1
    278         do ix=0,numxgridn-1
    279     ! concentration greater zero
    280           if (wetgrid(ix,jy).gt.smallnum) then
    281             if (sp_zer.eqv..true.) then ! first non zero value
    282               sp_count_i=sp_count_i+1
    283               sparse_dump_i(sp_count_i)=ix+jy*numxgridn
    284               sp_zer=.false.
    285               sp_fact=sp_fact*(-1.)
    286             endif
    287             sp_count_r=sp_count_r+1
    288             sparse_dump_r(sp_count_r)= sp_fact*1.e12*wetgrid(ix,jy)/arean(ix,jy)
     269    end do
     270
     271
     272  !*******************************************************************
     273  ! Generate output: may be in concentration (ng/m3) or in mixing
     274  ! ratio (ppt) or both
     275  ! Output the position and the values alternated multiplied by
     276  ! 1 or -1, first line is number of values, number of positions
     277  ! For backward simulations, the unit is seconds, stored in grid_time
     278  !*******************************************************************
     279
     280  ! Concentration output
     281  !*********************
     282  if ((iout.eq.1).or.(iout.eq.3).or.(iout.eq.5)) then
     283
     284  ! Wet deposition
     285         sp_count_i=0
     286         sp_count_r=0
     287         sp_fact=-1.
     288         sp_zer=.true.
     289         if ((ldirect.eq.1).and.(WETDEP)) then
     290         do jy=0,numygridn-1
     291            do ix=0,numxgridn-1
     292  !oncentraion greater zero
     293              if (wetgrid(ix,jy).gt.smallnum) then
     294                 if (sp_zer.eqv..true.) then ! first non zero value
     295                    sp_count_i=sp_count_i+1
     296                    sparse_dump_i(sp_count_i)=ix+jy*numxgridn
     297                    sp_zer=.false.
     298                    sp_fact=sp_fact*(-1.)
     299                 endif
     300                 sp_count_r=sp_count_r+1
     301                 sparse_dump_r(sp_count_r)= &
     302                      sp_fact*1.e12*wetgrid(ix,jy)/arean(ix,jy)
    289303  !                sparse_dump_u(sp_count_r)=
    290304  !+                1.e12*wetgridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
    291           else ! concentration is zero
    292             sp_zer=.true.
    293           endif
    294        end do
    295       end do
    296       else
    297         sp_count_i=0
    298         sp_count_r=0
    299       endif
    300       write(unitoutgrid) sp_count_i
    301       write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
    302       write(unitoutgrid) sp_count_r
    303       write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
    304     !       write(unitoutgrid) sp_count_u
    305     !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
    306 
    307     ! Dry deposition
    308       sp_count_i=0
    309       sp_count_r=0
    310       sp_fact=-1.
    311       sp_zer=.true.
    312       if ((ldirect.eq.1).and.(DRYDEP)) then
    313        do jy=0,numygridn-1
    314          do ix=0,numxgridn-1
    315            if (drygrid(ix,jy).gt.smallnum) then
    316              if (sp_zer.eqv..true.) then ! first non zero value
    317                 sp_count_i=sp_count_i+1
    318                 sparse_dump_i(sp_count_i)=ix+jy*numxgridn
    319                 sp_zer=.false.
    320                 sp_fact=sp_fact*(-1.)
    321              endif
    322              sp_count_r=sp_count_r+1
    323              sparse_dump_r(sp_count_r)= sp_fact* &
    324                   1.e12*drygrid(ix,jy)/arean(ix,jy)
     305              else ! concentration is zero
     306                  sp_zer=.true.
     307              endif
     308            end do
     309         end do
     310         else
     311            sp_count_i=0
     312            sp_count_r=0
     313         endif
     314         write(unitoutgrid) sp_count_i
     315         write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
     316         write(unitoutgrid) sp_count_r
     317         write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
     318  !       write(unitoutgrid) sp_count_u
     319  !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
     320
     321  ! Dry deposition
     322         sp_count_i=0
     323         sp_count_r=0
     324         sp_fact=-1.
     325         sp_zer=.true.
     326         if ((ldirect.eq.1).and.(DRYDEP)) then
     327          do jy=0,numygridn-1
     328            do ix=0,numxgridn-1
     329              if (drygrid(ix,jy).gt.smallnum) then
     330                 if (sp_zer.eqv..true.) then ! first non zero value
     331                    sp_count_i=sp_count_i+1
     332                    sparse_dump_i(sp_count_i)=ix+jy*numxgridn
     333                    sp_zer=.false.
     334                    sp_fact=sp_fact*(-1.)
     335                 endif
     336                 sp_count_r=sp_count_r+1
     337                 sparse_dump_r(sp_count_r)= &
     338                      sp_fact* &
     339                      1.e12*drygrid(ix,jy)/arean(ix,jy)
    325340  !                sparse_dump_u(sp_count_r)=
    326341  !+                1.e12*drygridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
    327            else ! concentration is zero
    328              sp_zer=.true.
    329            endif
    330          end do
    331        end do
    332       else
    333         sp_count_i=0
    334         sp_count_r=0
    335       endif
    336       write(unitoutgrid) sp_count_i
    337       write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
    338       write(unitoutgrid) sp_count_r
    339       write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
    340     !       write(*,*) sp_count_u
    341     !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
    342 
    343 
    344 
    345     ! Concentrations
    346       sp_count_i=0
    347       sp_count_r=0
    348       sp_fact=-1.
    349       sp_zer=.true.
    350       do kz=1,numzgrid
    351         do jy=0,numygridn-1
    352           do ix=0,numxgridn-1
    353             if (grid(ix,jy,kz).gt.smallnum) then
    354               if (sp_zer.eqv..true.) then ! first non zero value
    355                 sp_count_i=sp_count_i+1
    356                 sparse_dump_i(sp_count_i)= &
    357                       ix+jy*numxgridn+kz*numxgridn*numygridn
    358                 sp_zer=.false.
    359                 sp_fact=sp_fact*(-1.)
     342              else ! concentration is zero
     343                  sp_zer=.true.
    360344              endif
    361               sp_count_r=sp_count_r+1
    362               sparse_dump_r(sp_count_r)= sp_fact* grid(ix,jy,kz)* &
    363                      factor3d(ix,jy,kz)/tot_mu(ks,kp)
     345            end do
     346          end do
     347         else
     348            sp_count_i=0
     349            sp_count_r=0
     350         endif
     351         write(unitoutgrid) sp_count_i
     352         write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
     353         write(unitoutgrid) sp_count_r
     354         write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
     355  !       write(*,*) sp_count_u
     356  !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
     357
     358
     359
     360  ! Concentrations
     361         sp_count_i=0
     362         sp_count_r=0
     363         sp_fact=-1.
     364         sp_zer=.true.
     365          do kz=1,numzgrid
     366            do jy=0,numygridn-1
     367              do ix=0,numxgridn-1
     368                if (grid(ix,jy,kz).gt.smallnum) then
     369                  if (sp_zer.eqv..true.) then ! first non zero value
     370                    sp_count_i=sp_count_i+1
     371                    sparse_dump_i(sp_count_i)= &
     372                         ix+jy*numxgridn+kz*numxgridn*numygridn
     373                    sp_zer=.false.
     374                    sp_fact=sp_fact*(-1.)
     375                   endif
     376                   sp_count_r=sp_count_r+1
     377                   sparse_dump_r(sp_count_r)= &
     378                        sp_fact* &
     379                        grid(ix,jy,kz)* &
     380                        factor3d(ix,jy,kz)/tot_mu(ks,kp)
    364381  !                 if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
    365382  !    +              write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
     
    367384  !+               ,gridsigma(ix,jy,kz,ks,kp,nage)*
    368385  !+               factor(ix,jy,kz)/tot_mu(ks,kp)
    369             else ! concentration is zero
    370               sp_zer=.true.
    371             endif
     386              else ! concentration is zero
     387                  sp_zer=.true.
     388              endif
     389              end do
     390            end do
    372391          end do
    373         end do
    374       end do
    375       write(unitoutgrid) sp_count_i
    376       write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
    377       write(unitoutgrid) sp_count_r
    378       write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
    379     !       write(unitoutgrid) sp_count_u
    380     !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
    381 
    382 
    383 
    384       endif !  concentration output
    385 
    386     ! Mixing ratio output
    387     !********************
    388 
    389       if ((iout.eq.2).or.(iout.eq.3)) then      ! mixing ratio
    390 
    391       ! Wet deposition
    392         sp_count_i=0
    393         sp_count_r=0
    394         sp_fact=-1.
    395         sp_zer=.true.
    396         if ((ldirect.eq.1).and.(WETDEP)) then
     392         write(unitoutgrid) sp_count_i
     393         write(unitoutgrid) (sparse_dump_i(i),i=1,sp_count_i)
     394         write(unitoutgrid) sp_count_r
     395         write(unitoutgrid) (sparse_dump_r(i),i=1,sp_count_r)
     396  !       write(unitoutgrid) sp_count_u
     397  !       write(unitoutgrid) (sparse_dump_u(i),i=1,sp_count_r)
     398
     399
     400
     401    endif !  concentration output
     402
     403  ! Mixing ratio output
     404  !********************
     405
     406  if ((iout.eq.2).or.(iout.eq.3)) then      ! mixing ratio
     407
     408  ! Wet deposition
     409         sp_count_i=0
     410         sp_count_r=0
     411         sp_fact=-1.
     412         sp_zer=.true.
     413         if ((ldirect.eq.1).and.(WETDEP)) then
    397414          do jy=0,numygridn-1
    398415            do ix=0,numxgridn-1
    399               if (wetgrid(ix,jy).gt.smallnum) then
    400                 if (sp_zer.eqv..true.) then ! first non zero value
    401                   sp_count_i=sp_count_i+1
    402                   sparse_dump_i(sp_count_i)= ix+jy*numxgridn
    403                   sp_zer=.false.
    404                   sp_fact=sp_fact*(-1.)
    405                 endif
    406                 sp_count_r=sp_count_r+1
    407                 sparse_dump_r(sp_count_r)= sp_fact* &
    408                    1.e12*wetgrid(ix,jy)/arean(ix,jy)
    409     !                sparse_dump_u(sp_count_r)=
    410     !    +            ,1.e12*wetgridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
     416                if (wetgrid(ix,jy).gt.smallnum) then
     417                  if (sp_zer.eqv..true.) then ! first non zero value
     418                    sp_count_i=sp_count_i+1
     419                    sparse_dump_i(sp_count_i)= &
     420                         ix+jy*numxgridn
     421                    sp_zer=.false.
     422                    sp_fact=sp_fact*(-1.)
     423                 endif
     424                 sp_count_r=sp_count_r+1
     425                 sparse_dump_r(sp_count_r)= &
     426                      sp_fact* &
     427                      1.e12*wetgrid(ix,jy)/arean(ix,jy)
     428  !                sparse_dump_u(sp_count_r)=
     429  !    +            ,1.e12*wetgridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
    411430              else ! concentration is zero
    412                 sp_zer=.true.
     431                  sp_zer=.true.
    413432              endif
    414433            end do
    415434          end do
    416         else
    417           sp_count_i=0
    418           sp_count_r=0
    419         endif
    420         write(unitoutgridppt) sp_count_i
    421         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
    422         write(unitoutgridppt) sp_count_r
    423         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
    424     !       write(unitoutgridppt) sp_count_u
    425     !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
    426 
    427 
    428       ! Dry deposition
    429         sp_count_i=0
    430         sp_count_r=0
    431         sp_fact=-1.
    432         sp_zer=.true.
    433         if ((ldirect.eq.1).and.(DRYDEP)) then
     435         else
     436           sp_count_i=0
     437           sp_count_r=0
     438         endif
     439         write(unitoutgridppt) sp_count_i
     440         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
     441         write(unitoutgridppt) sp_count_r
     442         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
     443  !       write(unitoutgridppt) sp_count_u
     444  !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
     445
     446
     447  ! Dry deposition
     448         sp_count_i=0
     449         sp_count_r=0
     450         sp_fact=-1.
     451         sp_zer=.true.
     452         if ((ldirect.eq.1).and.(DRYDEP)) then
    434453          do jy=0,numygridn-1
    435454            do ix=0,numxgridn-1
    436               if (drygrid(ix,jy).gt.smallnum) then
    437                 if (sp_zer.eqv..true.) then ! first non zero value
    438                   sp_count_i=sp_count_i+1
    439                   sparse_dump_i(sp_count_i)= ix+jy*numxgridn
    440                   sp_zer=.false.
    441                   sp_fact=sp_fact*(-1)
    442                 endif
    443                 sp_count_r=sp_count_r+1
    444                 sparse_dump_r(sp_count_r)= sp_fact* &
    445                      1.e12*drygrid(ix,jy)/arean(ix,jy)
    446     !                sparse_dump_u(sp_count_r)=
    447     !    +            ,1.e12*drygridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
     455                if (drygrid(ix,jy).gt.smallnum) then
     456                  if (sp_zer.eqv..true.) then ! first non zero value
     457                    sp_count_i=sp_count_i+1
     458                    sparse_dump_i(sp_count_i)= &
     459                         ix+jy*numxgridn
     460                    sp_zer=.false.
     461                    sp_fact=sp_fact*(-1)
     462                 endif
     463                 sp_count_r=sp_count_r+1
     464                 sparse_dump_r(sp_count_r)= &
     465                      sp_fact* &
     466                      1.e12*drygrid(ix,jy)/arean(ix,jy)
     467  !                sparse_dump_u(sp_count_r)=
     468  !    +            ,1.e12*drygridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
    448469              else ! concentration is zero
    449                 sp_zer=.true.
     470                  sp_zer=.true.
    450471              endif
    451472            end do
    452473          end do
    453         else
    454           sp_count_i=0
    455           sp_count_r=0
    456         endif
    457         write(unitoutgridppt) sp_count_i
    458         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
    459         write(unitoutgridppt) sp_count_r
    460         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
    461     !       write(unitoutgridppt) sp_count_u
    462     !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
    463 
    464 
    465       ! Mixing ratios
    466         sp_count_i=0
    467         sp_count_r=0
    468         sp_fact=-1.
    469         sp_zer=.true.
    470         do kz=1,numzgrid
    471            do jy=0,numygridn-1
     474         else
     475           sp_count_i=0
     476           sp_count_r=0
     477         endif
     478         write(unitoutgridppt) sp_count_i
     479         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
     480         write(unitoutgridppt) sp_count_r
     481         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
     482  !       write(unitoutgridppt) sp_count_u
     483  !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
     484
     485
     486  ! Mixing ratios
     487         sp_count_i=0
     488         sp_count_r=0
     489         sp_fact=-1.
     490         sp_zer=.true.
     491          do kz=1,numzgrid
     492            do jy=0,numygridn-1
    472493              do ix=0,numxgridn-1
    473494                if (grid(ix,jy,kz).gt.smallnum) then
     
    475496                    sp_count_i=sp_count_i+1
    476497                    sparse_dump_i(sp_count_i)= &
    477                         ix+jy*numxgridn+kz*numxgridn*numygridn
     498                         ix+jy*numxgridn+kz*numxgridn*numygridn
    478499                    sp_zer=.false.
    479500                    sp_fact=sp_fact*(-1.)
    480501                 endif
    481502                 sp_count_r=sp_count_r+1
    482                  sparse_dump_r(sp_count_r)= sp_fact* 1.e12*grid(ix,jy,kz) &
    483                      /volumen(ix,jy,kz)/outnum* &
    484                      weightair/weightmolar(ks)/densityoutgrid(ix,jy,kz)
    485     !                sparse_dump_u(sp_count_r)=
    486     !+              ,1.e12*gridsigma(ix,jy,kz,ks,kp,nage)/volume(ix,jy,kz)/
    487     !+              outnum*weightair/weightmolar(ks)/
    488     !+              densityoutgrid(ix,jy,kz)
    489                 else ! concentration is zero
    490                 sp_zer=.true.
     503                 sparse_dump_r(sp_count_r)= &
     504                      sp_fact* &
     505                      1.e12*grid(ix,jy,kz) &
     506                      /volumen(ix,jy,kz)/outnum* &
     507                      weightair/weightmolar(ks)/densityoutgrid(ix,jy,kz)
     508  !                sparse_dump_u(sp_count_r)=
     509  !+              ,1.e12*gridsigma(ix,jy,kz,ks,kp,nage)/volume(ix,jy,kz)/
     510  !+              outnum*weightair/weightmolar(ks)/
     511  !+              densityoutgrid(ix,jy,kz)
     512              else ! concentration is zero
     513                  sp_zer=.true.
    491514              endif
     515              end do
     516            end do
     517          end do
     518         write(unitoutgridppt) sp_count_i
     519         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
     520         write(unitoutgridppt) sp_count_r
     521         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
     522  !       write(unitoutgridppt) sp_count_u
     523  !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
     524
     525      endif ! output for ppt
     526
     527  end do
     528  end do
     529
     530    close(unitoutgridppt)
     531    close(unitoutgrid)
     532
     533  end do
     534
     535
     536
     537  ! Reinitialization of grid
     538  !*************************
     539
     540  do ks=1,nspec
     541  do kp=1,maxpointspec_act
     542    do i=1,numreceptor
     543      creceptor(i,ks)=0.
     544    end do
     545    do jy=0,numygridn-1
     546      do ix=0,numxgridn-1
     547        do l=1,nclassunc
     548          do nage=1,nageclass
     549            do kz=1,numzgrid
     550              griduncn(ix,jy,kz,ks,kp,l,nage)=0.
    492551            end do
    493552          end do
    494553        end do
    495         write(unitoutgridppt) sp_count_i
    496         write(unitoutgridppt) (sparse_dump_i(i),i=1,sp_count_i)
    497         write(unitoutgridppt) sp_count_r
    498         write(unitoutgridppt) (sparse_dump_r(i),i=1,sp_count_r)
    499     !       write(unitoutgridppt) sp_count_u
    500     !       write(unitoutgridppt) (sparse_dump_u(i),i=1,sp_count_r)
    501 
    502       endif ! output for ppt
    503 
    504     end do
    505     end do
    506 
    507     close(unitoutgridppt)
    508     close(unitoutgrid)
    509 
     554      end do
     555    end do
    510556  end do
    511 
    512 
    513 
    514   ! Reinitialization of grid
    515   !*************************
    516 
    517   griduncn=0.
    518   if (ldep_incr) then ! incremental deposition output
    519     wetgriduncn=0.
    520     drygriduncn=0.
    521   endif
     557  end do
     558
    522559
    523560end subroutine concoutput_nest
     561
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG