Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/petra/src/concoutput_nest.f90

    r4 r36  
    11!**********************************************************************
    2 ! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010         *
     2! Copyright 1998-2015                                                 *
    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=
    4749  !                                                                            *
    4850  !*****************************************************************************
     
    112114
    113115
    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
    125       end do
    126     endif
     116  if (ldirect.eq.1) then
     117    do ks=1,nspec
     118      do kp=1,maxpointspec_act
     119        tot_mu(ks,kp)=1
     120      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
    127129
    128130
     
    162164  end do
    163165
    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
    183       end do
    184     end do
     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
     184      end do
     185    end do
     186  end do
    185187
    186188  !*********************************************************************
     
    191193  do ks=1,nspec
    192194
    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')
     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
    203212    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// &
    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
     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
    223222            do l=1,nclassunc
    224223              auxgrid(l)=wetgriduncn(ix,jy,ks,kp,l,nage)
    225224            end do
    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
     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
    239234            do l=1,nclassunc
    240235              auxgrid(l)=drygriduncn(ix,jy,ks,kp,l,nage)
    241236            end do
    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
     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
    255246            do l=1,nclassunc
    256247              auxgrid(l)=griduncn(ix,jy,kz,ks,kp,l,nage)
    257248            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))
     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
    267255        end do
    268256      end do
    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)
     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)
    303289  !                sparse_dump_u(sp_count_r)=
    304290  !+                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)
     325  !                sparse_dump_u(sp_count_r)=
     326  !+                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.)
     360              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)
     364  !                 if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
     365  !    +              write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
     366  !                sparse_dump_u(sp_count_r)=
     367  !+               ,gridsigma(ix,jy,kz,ks,kp,nage)*
     368  !+               factor(ix,jy,kz)/tot_mu(ks,kp)
     369            else ! concentration is zero
     370              sp_zer=.true.
     371            endif
     372          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
     397          do jy=0,numygridn-1
     398            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)
    305411              else ! concentration is zero
    306                   sp_zer=.true.
     412                sp_zer=.true.
    307413              endif
    308414            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
     415          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
    327434          do jy=0,numygridn-1
    328435            do ix=0,numxgridn-1
    329436              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)
    340   !                sparse_dump_u(sp_count_r)=
    341   !+                1.e12*drygridsigma(ix,jy,ks,kp,nage)/area(ix,jy)
     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)
    342448              else ! concentration is zero
    343                   sp_zer=.true.
     449                sp_zer=.true.
    344450              endif
    345451            end do
    346452          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
     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
    367472              do ix=0,numxgridn-1
    368473                if (grid(ix,jy,kz).gt.smallnum) then
     
    370475                    sp_count_i=sp_count_i+1
    371476                    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)
    381   !                 if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
    382   !    +              write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
    383   !                sparse_dump_u(sp_count_r)=
    384   !+               ,gridsigma(ix,jy,kz,ks,kp,nage)*
    385   !+               factor(ix,jy,kz)/tot_mu(ks,kp)
    386               else ! concentration is zero
    387                   sp_zer=.true.
    388               endif
    389               end do
    390             end do
    391           end do
    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
    414           do jy=0,numygridn-1
    415             do ix=0,numxgridn-1
    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
     477                        ix+jy*numxgridn+kz*numxgridn*numygridn
    421478                    sp_zer=.false.
    422479                    sp_fact=sp_fact*(-1.)
    423480                 endif
    424481                 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)
    430               else ! concentration is zero
    431                   sp_zer=.true.
     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.
    432491              endif
    433492            end do
    434493          end do
    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
    453           do jy=0,numygridn-1
    454             do ix=0,numxgridn-1
    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)
    469               else ! concentration is zero
    470                   sp_zer=.true.
    471               endif
    472             end do
    473           end do
    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
    493               do ix=0,numxgridn-1
    494                 if (grid(ix,jy,kz).gt.smallnum) then
    495                   if (sp_zer.eqv..true.) then ! first non zero value
    496                     sp_count_i=sp_count_i+1
    497                     sparse_dump_i(sp_count_i)= &
    498                          ix+jy*numxgridn+kz*numxgridn*numygridn
    499                     sp_zer=.false.
    500                     sp_fact=sp_fact*(-1.)
    501                  endif
    502                  sp_count_r=sp_count_r+1
    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.
    514               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)
     494        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)
    524501
    525502      endif ! output for ppt
    526503
    527   end do
    528   end do
     504    end do
     505    end do
    529506
    530507    close(unitoutgridppt)
     
    538515  !*************************
    539516
    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.
    551             end do
    552           end do
    553         end do
    554       end do
    555     end do
    556   end do
    557   end do
    558 
     517  griduncn=0.
     518  if (ldep_incr) then ! incremental deposition output
     519    wetgriduncn=0.
     520    drygriduncn=0.
     521  endif
    559522
    560523end subroutine concoutput_nest
    561 
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG