Changeset 08a38b5 in flexpart.git


Ignore:
Timestamp:
Oct 3, 2017, 3:44:21 PM (6 years ago)
Author:
Espen Sollum ATMOS <eso@…>
Branches:
master, 10.4.1_pesei, GFS_025, bugfixes+enhancements, dev, release-10, release-10.4.1, scaling-bug, univie
Children:
de4c5e9
Parents:
bb579a9
Message:

Added (hardcoded) option to output number of particles per grid cell.

Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/conccalc.f90

    re52967c r08a38b5  
    193193             (jy.le.numygrid-1)) then
    194194          if (DRYBKDEP.or.WETBKDEP) then
    195              do ks=1,nspec
    196                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    197                  gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    198                  xmass1(i,ks)/rhoi*weight*max(xscav_frac1(i,ks),0.0)
    199              end do
     195            do ks=1,nspec
     196              gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     197                   gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     198                   xmass1(i,ks)/rhoi*weight*max(xscav_frac1(i,ks),0.0)
     199            end do
    200200          else
    201              do ks=1,nspec
    202                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    203                  gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    204                  xmass1(i,ks)/rhoi*weight
    205              end do
     201            if (lparticlecountoutput) then
     202              do ks=1,nspec
     203                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     204                     gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+1
     205              end do
     206            else
     207              do ks=1,nspec
     208                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     209                     gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     210                     xmass1(i,ks)/rhoi*weight
     211              end do
     212            end if
    206213          endif
    207214        endif
     
    336343               end do
    337344            else
    338                do ks=1,nspec
    339                  griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    340                    griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    341                    xmass1(i,ks)/rhoi*weight
    342                end do
    343             endif
    344           endif
    345 
     345              if (lparticlecountoutput) then
     346                do ks=1,nspec
     347                  griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     348                       griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+1
     349                end do
     350              else
     351                do ks=1,nspec
     352                  griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     353                       griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     354                       xmass1(i,ks)/rhoi*weight
     355                end do
     356              endif
     357            endif
     358          endif
     359         
    346360        else                                 ! attribution via uniform kernel
    347361
  • src/conccalc_mpi.f90

    re52967c r08a38b5  
    205205        if ((ix.ge.0).and.(jy.ge.0).and.(ix.le.numxgrid-1).and. &
    206206             (jy.le.numygrid-1)) then
    207           do ks=1,nspec
    208             gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    209                  gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    210                  xmass1(i,ks)/rhoi*weight
    211           end do
     207          if (DRYBKDEP.or.WETBKDEP) then
     208            do ks=1,nspec
     209              gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     210                   gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     211                   xmass1(i,ks)/rhoi*weight*max(xscav_frac1(i,ks),0.0)
     212            end do
     213          else
     214            if (lparticlecountoutput) then
     215              do ks=1,nspec
     216                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     217                     gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+1
     218              end do
     219            else
     220              do ks=1,nspec
     221                gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     222                     gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     223                     xmass1(i,ks)/rhoi*weight
     224              end do
     225            end if
     226          endif
    212227        endif
    213228
     
    239254          if ((jy.ge.0).and.(jy.le.numygrid-1)) then
    240255            w=wx*wy
    241             do ks=1,nspec
    242               gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     256            if (DRYBKDEP.or.WETBKDEP) then
     257               do ks=1,nspec
     258                 gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     259                   gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     260                   xmass1(i,ks)/rhoi*w*weight*max(xscav_frac1(i,ks),0.0)
     261               end do
     262            else
     263               do ks=1,nspec
     264                 gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    243265                   gridunc(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    244266                   xmass1(i,ks)/rhoi*weight*w
    245             end do
     267               end do
     268            endif
    246269          endif
    247270
    248271          if ((jyp.ge.0).and.(jyp.le.numygrid-1)) then
    249272            w=wx*(1.-wy)
    250             do ks=1,nspec
    251               gridunc(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     273            if (DRYBKDEP.or.WETBKDEP) then
     274              do ks=1,nspec
     275                 gridunc(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     276                   gridunc(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
     277                   xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     278               end do
     279             else
     280              do ks=1,nspec
     281                 gridunc(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
    252282                   gridunc(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
    253283                   xmass1(i,ks)/rhoi*weight*w
    254             end do
     284               end do
     285             endif
    255286          endif
    256287        endif
     
    260291          if ((jyp.ge.0).and.(jyp.le.numygrid-1)) then
    261292            w=(1.-wx)*(1.-wy)
    262             do ks=1,nspec
    263               gridunc(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     293            if (DRYBKDEP.or.WETBKDEP) then
     294               do ks=1,nspec
     295                 gridunc(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     296                   gridunc(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
     297                   xmass1(i,ks)/rhoi*w*weight*max(xscav_frac1(i,ks),0.0)
     298               end do
     299            else
     300               do ks=1,nspec
     301                 gridunc(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
    264302                   gridunc(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
    265303                   xmass1(i,ks)/rhoi*weight*w
    266             end do
     304               end do
     305            endif
    267306          endif
    268307
    269308          if ((jy.ge.0).and.(jy.le.numygrid-1)) then
    270309            w=(1.-wx)*wy
    271             do ks=1,nspec
    272               gridunc(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     310            if (DRYBKDEP.or.WETBKDEP) then
     311               do ks=1,nspec
     312                 gridunc(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     313                   gridunc(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     314                   xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     315               end do
     316            else
     317               do ks=1,nspec
     318                 gridunc(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    273319                   gridunc(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    274320                   xmass1(i,ks)/rhoi*weight*w
    275             end do
     321               end do
     322            endif
    276323          endif
    277324        endif
     
    304351          if ((ix.ge.0).and.(jy.ge.0).and.(ix.le.numxgridn-1).and. &
    305352               (jy.le.numygridn-1)) then
    306             do ks=1,nspec
    307               griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     353            if (DRYBKDEP.or.WETBKDEP) then
     354               do ks=1,nspec
     355                 griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    308356                   griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    309                    xmass1(i,ks)/rhoi*weight
    310             end do
     357                   xmass1(i,ks)/rhoi*weight*max(xscav_frac1(i,ks),0.0)
     358               end do
     359            else
     360              if (lparticlecountoutput) then
     361                do ks=1,nspec
     362                  griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     363                       griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+1
     364                end do
     365              else
     366                do ks=1,nspec
     367                  griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     368                       griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     369                       xmass1(i,ks)/rhoi*weight
     370                end do
     371              endif
     372            endif
    311373          endif
    312374
     
    338400            if ((jy.ge.0).and.(jy.le.numygridn-1)) then
    339401              w=wx*wy
    340               do ks=1,nspec
    341                 griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     402              if (DRYBKDEP.or.WETBKDEP) then
     403                 do ks=1,nspec
     404                   griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     405                     griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     406                     xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     407                 end do
     408              else
     409                do ks=1,nspec
     410                   griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    342411                     griduncn(ix,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    343412                     xmass1(i,ks)/rhoi*weight*w
    344               end do
     413                 end do
     414              endif
    345415            endif
    346416
    347417            if ((jyp.ge.0).and.(jyp.le.numygridn-1)) then
    348418              w=wx*(1.-wy)
    349               do ks=1,nspec
    350                 griduncn(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     419              if (DRYBKDEP.or.WETBKDEP) then
     420                 do ks=1,nspec
     421                   griduncn(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     422                     griduncn(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
     423                     xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     424                 end do
     425              else
     426                 do ks=1,nspec
     427                   griduncn(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
    351428                     griduncn(ix,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
    352429                     xmass1(i,ks)/rhoi*weight*w
    353               end do
     430                 end do
     431              endif
    354432            endif
    355433          endif
     
    359437            if ((jyp.ge.0).and.(jyp.le.numygridn-1)) then
    360438              w=(1.-wx)*(1.-wy)
    361               do ks=1,nspec
    362                 griduncn(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     439              if (DRYBKDEP.or.WETBKDEP) then
     440                 do ks=1,nspec
     441                   griduncn(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
     442                     griduncn(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
     443                     xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     444                 end do
     445              else
     446                 do ks=1,nspec
     447                   griduncn(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)= &
    363448                     griduncn(ixp,jyp,kz,ks,nrelpointer,nclass(i),nage)+ &
    364449                     xmass1(i,ks)/rhoi*weight*w
    365               end do
     450                 end do
     451              endif
    366452            endif
    367453
    368454            if ((jy.ge.0).and.(jy.le.numygridn-1)) then
    369455              w=(1.-wx)*wy
    370               do ks=1,nspec
    371                 griduncn(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     456              if (DRYBKDEP.or.WETBKDEP) then
     457                 do ks=1,nspec
     458                   griduncn(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
     459                     griduncn(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
     460                     xmass1(i,ks)/rhoi*weight*w*max(xscav_frac1(i,ks),0.0)
     461                 end do
     462              else
     463                 do ks=1,nspec
     464                    griduncn(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)= &
    372465                     griduncn(ixp,jy,kz,ks,nrelpointer,nclass(i),nage)+ &
    373466                     xmass1(i,ks)/rhoi*weight*w
    374               end do
     467                 end do
     468              endif
    375469            endif
    376470          endif
  • src/concoutput.f90

    r6985a98 r08a38b5  
    446446                  endif
    447447                  sp_count_r=sp_count_r+1
    448                   sparse_dump_r(sp_count_r)= &
    449                        sp_fact* &
    450                        grid(ix,jy,kz)* &
    451                        factor3d(ix,jy,kz)/tot_mu(ks,kp)
     448                  if (lparticlecountoutput) then
     449                    sparse_dump_r(sp_count_r)= &
     450                         sp_fact* &
     451                         grid(ix,jy,kz)
     452                  else
     453                    sparse_dump_r(sp_count_r)= &
     454                         sp_fact* &
     455                         grid(ix,jy,kz)* &
     456                         factor3d(ix,jy,kz)/tot_mu(ks,kp)
     457                  end if
     458
     459
    452460!                 if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
    453461!    +              write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
  • src/par_mod.f90

    rd8eed02 r08a38b5  
    6060  logical, parameter :: lnokernel=.false.
    6161
     62  !*********************************************************************
     63  ! Set to T to change output units to number of particles per grid cell
     64  !*********************************************************************
     65  logical, parameter :: lparticlecountoutput=.false.
     66
    6267  !***********************************************************
    63   ! Number of directories/files used for FLEXPART input/output
     68  ! number of directories/files used for FLEXPART input/output
    6469  !***********************************************************
    6570
     
    141146  !*********************************************
    142147 
    143 !  integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92 !ECMWF new
    144   integer,parameter :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138 !ECMWF new
    145 
    146 !  integer,parameter :: nxmax=181,nymax=91,nuvzmax=138,nwzmax=138,nzmax=138 !ECMWF new
    147 
    148 !  INTEGER,PARAMETER :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138 !NCEP data
    149 
    150 integer,parameter :: nxshift=359  ! for ECMWF
    151   integer,parameter :: nxshift=0     ! for GFS
     148  ! ECMWF
     149! integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92,nxshift=359 ! 1.0 degree 92 level
     150   integer,parameter :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138,nxshift=359 ! 1.0 degree 138 level
     151! integer,parameter :: nxmax=721,nymax=361,nuvzmax=138,nwzmax=138,nzmax=138,nxshift=359  ! 0.5 degree 138 level
     152!  integer,parameter :: nxmax=181,nymax=91,nuvzmax=92,nwzmax=92,nzmax=92,nxshift=0  ! CERA 2.0 degree 92 level
     153
     154! GFS
     155 integer,parameter :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138,nxshift=0
     156
    152157
    153158  !*********************************************
     
    155160  !*********************************************
    156161
    157   integer,parameter :: maxnests=1,nxmaxn=451,nymaxn=226
     162  integer,parameter :: maxnests=0,nxmaxn=451,nymaxn=226
    158163
    159164  ! nxmax,nymax        maximum dimension of wind fields in x and y
     
    213218  !**************************************************
    214219
    215   integer,parameter :: maxpart=10000000
     220  integer,parameter :: maxpart=3000000
    216221  integer,parameter :: maxspec=4
    217222
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG