Changes in trunk/src/timemanager.f90 [30:20]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/timemanager.f90
r30 r20 43 43 ! call convection BEFORE new fields are read in BWD mode * 44 44 ! Changes Caroline Forster, Feb 2005 * 45 ! new interface between flexpart and convection scheme * 46 ! Emanuel's latest subroutine convect43c.f is used * 47 ! Changes Stefan Henne, Harald Sodemann, 2013-2014 * 48 ! added netcdf output code * 45 !new interface between flexpart and convection scheme * 46 !Emanuel's latest subroutine convect43c.f is used * 49 47 !***************************************************************************** 50 48 ! * 51 49 ! Variables: * 52 ! dep.true. if either wet or dry deposition is switched on *50 ! DEP .true. if either wet or dry deposition is switched on * 53 51 ! decay(maxspec) [1/s] decay constant for radioactive decay * 54 ! drydep.true. if dry deposition is switched on *52 ! DRYDEP .true. if dry deposition is switched on * 55 53 ! ideltas [s] modelling period * 56 54 ! itime [s] actual temporal position of calculation * … … 72 70 ! prob probability of absorption at ground due to dry * 73 71 ! deposition * 74 ! wetdep.true. if wet deposition is switched on *72 ! WETDEP .true. if wet deposition is switched on * 75 73 ! weight weight for each concentration sample (1/2 or 1) * 76 74 ! uap(maxpart),ucp(maxpart),uzp(maxpart) = random velocities due to * … … 94 92 use par_mod 95 93 use com_mod 96 #ifdef NETCDF_OUTPUT97 use netcdf_output_mod, only: concoutput_netcdf, concoutput_nest_netcdf,concoutput_surf_netcdf, concoutput_surf_nest_netcdf98 #endif99 94 100 95 implicit none … … 134 129 135 130 136 itime=0137 !write(*,45) itime,numpart,gridtotalunc,wetgridtotalunc,drygridtotalunc138 write(*,46) float(itime)/3600,itime,numpart139 131 if (verbosity.gt.0) then 140 132 write (*,*) 'timemanager> starting simulation' … … 146 138 147 139 do itime=0,ideltas,lsynctime 140 148 141 149 142 ! Computation of wet deposition, OH reaction and mass transfer … … 157 150 !******************************************************************** 158 151 159 if ( wetdep.and. itime .ne. 0 .and. numpart .gt. 0) then152 if (WETDEP .and. itime .ne. 0 .and. numpart .gt. 0) then 160 153 if (verbosity.gt.0) then 161 154 write (*,*) 'timemanager> call wetdepo' … … 164 157 endif 165 158 166 if ( ohrea.and. itime .ne. 0 .and. numpart .gt. 0) &159 if (OHREA .and. itime .ne. 0 .and. numpart .gt. 0) & 167 160 call ohreaction(itime,lsynctime,loutnext) 168 161 169 if ( assspec.and. itime .ne. 0 .and. numpart .gt. 0) then162 if (ASSSPEC .and. itime .ne. 0 .and. numpart .gt. 0) then 170 163 stop 'associated species not yet implemented!' 171 164 ! call transferspec(itime,lsynctime,loutnext) … … 245 238 !*********************************************************************** 246 239 247 if ( dep.and.(itime.eq.loutnext).and.(ldirect.gt.0)) then240 if (DEP.and.(itime.eq.loutnext).and.(ldirect.gt.0)) then 248 241 do ks=1,nspec 249 242 do kp=1,maxpointspec_act … … 355 348 if ((iout.le.3.).or.(iout.eq.5)) then 356 349 if (surf_only.ne.1) then 357 if (lnetcdfout.eq.1) then 358 #ifdef NETCDF_OUTPUT 359 call concoutput_netcdf(itime,outnum,gridtotalunc,wetgridtotalunc,drygridtotalunc) 360 #endif 361 else 362 call concoutput(itime,outnum,gridtotalunc,wetgridtotalunc,drygridtotalunc) 363 endif 350 call concoutput(itime,outnum,gridtotalunc, & 351 wetgridtotalunc,drygridtotalunc) 364 352 else 365 if (verbosity.eq.1) then 366 print*,'call concoutput_surf ' 367 call system_clock(count_clock) 368 write(*,*) 'system clock',count_clock - count_clock0 369 endif 370 if (lnetcdfout.eq.1) then 371 #ifdef NETCDF_OUTPUT 372 call concoutput_surf_netcdf(itime,outnum,gridtotalunc,wetgridtotalunc,drygridtotalunc) 373 #endif 374 else 375 call concoutput_surf(itime,outnum,gridtotalunc,wetgridtotalunc,drygridtotalunc) 376 if (verbosity.eq.1) then 377 print*,'called concoutput_surf ' 378 call system_clock(count_clock) 379 write(*,*) 'system clock',count_clock - count_clock0 380 endif 381 endif 353 if (verbosity.eq.1) then 354 print*,'call concoutput_surf ' 355 CALL SYSTEM_CLOCK(count_clock) 356 WRITE(*,*) 'SYSTEM_CLOCK',count_clock - count_clock0 357 endif 358 call concoutput_surf(itime,outnum,gridtotalunc, & 359 wetgridtotalunc,drygridtotalunc) 360 if (verbosity.eq.1) then 361 print*,'called concoutput_surf ' 362 CALL SYSTEM_CLOCK(count_clock) 363 WRITE(*,*) 'SYSTEM_CLOCK',count_clock - count_clock0 364 endif 382 365 endif 383 366 384 if (nested_output .eq. 1) then 385 if (lnetcdfout.eq.0) then 386 if (surf_only.ne.1) then 387 call concoutput_nest(itime,outnum) 388 else 389 call concoutput_surf_nest(itime,outnum) 390 endif 391 else 392 #ifdef NETCDF_OUTPUT 393 if (surf_only.ne.1) then 394 call concoutput_nest_netcdf(itime,outnum) 395 else 396 call concoutput_surf_nest_netcdf(itime,outnum) 397 endif 398 #endif 399 endif 400 endif 367 if ((nested_output.eq.1).and.(surf_only.ne.1)) call concoutput_nest(itime,outnum) 368 if ((nested_output.eq.1).and.(surf_only.eq.1)) call concoutput_surf_nest(itime,outnum) 401 369 outnum=0. 402 370 endif 403 371 if ((iout.eq.4).or.(iout.eq.5)) call plumetraj(itime) 404 372 if (iflux.eq.1) call fluxoutput(itime) 405 !write(*,45) itime,numpart,gridtotalunc,wetgridtotalunc,drygridtotalunc406 write(*,46) float(itime)/3600,itime,numpart407 45 format(i9,' SECONDS SIMULATED: ',i8, ' PARTICLES: Uncertainty: ',3f7.3)408 46 format(' Simulated ',f7.1,' hours (',i9,' s), ',i8, ' particles')373 write(*,45) itime,numpart,gridtotalunc,wetgridtotalunc, & 374 drygridtotalunc 375 45 format(i9,' SECONDS SIMULATED: ',i8, & 376 ' PARTICLES: Uncertainty: ',3f7.3) 409 377 if (ipout.ge.1) call partoutput(itime) ! dump particle positions 410 378 loutnext=loutnext+loutstep … … 504 472 !**************************** 505 473 506 xold= real(xtra1(j))507 yold= real(ytra1(j))474 xold=xtra1(j) 475 yold=ytra1(j) 508 476 zold=ztra1(j) 509 477 … … 545 513 endif 546 514 547 if ( drydepspec(ks)) then ! dry deposition515 if (DRYDEPSPEC(ks)) then ! dry deposition 548 516 drydeposit(ks)=xmass1(j,ks)*prob(ks)*decfact 549 517 xmass1(j,ks)=xmass1(j,ks)*(1.-prob(ks))*decfact … … 556 524 endif 557 525 526 558 527 if (mdomainfill.eq.0) then 559 528 if (xmass(npoint(j),ks).gt.0.) & … … 567 536 if (xmassfract.lt.0.0001) then ! terminate all particles carrying less mass 568 537 itra1(j)=-999999999 569 if (verbosity.gt.0) then570 print*,'terminated particle ',j,' for small mass'571 endif572 538 endif 573 539 574 540 ! Sabine Eckhardt, June 2008 575 541 ! don't create depofield for backward runs 576 if (drydep.AND.(ldirect.eq.1)) then 577 call drydepokernel(nclass(j),drydeposit,real(xtra1(j)),real(ytra1(j)),nage,kp) 578 if (nested_output.eq.1) then 579 call drydepokernel_nest(nclass(j),drydeposit,real(xtra1(j)),real(ytra1(j)),nage,kp) 580 endif 542 if (DRYDEP.AND.(ldirect.eq.1)) then 543 call drydepokernel(nclass(j),drydeposit,real(xtra1(j)), & 544 real(ytra1(j)),nage,kp) 545 if (nested_output.eq.1) call drydepokernel_nest( & 546 nclass(j),drydeposit,real(xtra1(j)),real(ytra1(j)), & 547 nage,kp) 581 548 endif 582 549 … … 585 552 586 553 if (abs(itra1(j)-itramem(j)).ge.lage(nageclass)) then 587 if (linit_cond.ge.1) call initial_cond_calc(itime+lsynctime,j) 554 if (linit_cond.ge.1) & 555 call initial_cond_calc(itime+lsynctime,j) 588 556 itra1(j)=-999999999 589 if (verbosity.gt.0) then590 print*,'terminated particle ',j,' for age'591 endif592 557 endif 593 558 endif … … 617 582 618 583 if (iflux.eq.1) then 619 deallocate(flux)584 deallocate(flux) 620 585 endif 621 if ( ohrea.eqv..TRUE.) then622 deallocate(OH_field,OH_field_height)586 if (OHREA.eqv..TRUE.) then 587 deallocate(OH_field,OH_field_height) 623 588 endif 624 589 if (ldirect.gt.0) then 625 590 deallocate(drygridunc,wetgridunc) 626 591 endif 627 592 deallocate(gridunc) … … 630 595 deallocate(xmasssave) 631 596 if (nested_output.eq.1) then 632 deallocate(orooutn, arean, volumen)633 if (ldirect.gt.0) then634 635 endif597 deallocate(orooutn, arean, volumen) 598 if (ldirect.gt.0) then 599 deallocate(griduncn,drygriduncn,wetgriduncn) 600 endif 636 601 endif 637 602 deallocate(outheight,outheighthalf) 638 deallocate(oroout, area,volume)603 deallocate(oroout, area, volume) 639 604 640 605 end subroutine timemanager
Note: See TracChangeset
for help on using the changeset viewer.