Changeset 30
- Timestamp:
- Oct 21, 2014, 8:08:00 AM (10 years ago)
- Location:
- trunk/src
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/FLEXPART.f90
r27 r30 45 45 use conv_mod 46 46 47 #ifdef NETCDF_OUTPUT 48 use netcdf_output_mod, only: writeheader_netcdf 49 #endif 50 51 47 52 implicit none 48 53 … … 303 308 !****************************************************************** 304 309 310 if (lnetcdfout.eq.1) then 311 #ifdef NETCDF_OUTPUT 312 call writeheader_netcdf(lnest = .false.) 313 #endif 314 else 315 call writeheader 316 end if 317 318 if (nested_output.eq.1) then 319 if (lnetcdfout.eq.1) then 320 #ifdef NETCDF_OUTPUT 321 call writeheader_netcdf(lnest = .true.) 322 #endif 323 else 324 call writeheader_nest 325 endif 326 endif 327 305 328 if (verbosity.gt.0) then 306 329 print*,'call writeheader' … … 315 338 if (nested_output.ne.1.and.surf_only.eq.1) call writeheader_surf 316 339 317 !open(unitdates,file=path(2)(1:length(2))//'dates') 340 if (lnetcdfout.ne.1) then 341 open(unitdates,file=path(2)(1:length(2))//'dates') 342 end if 318 343 319 344 if (verbosity.gt.0) then … … 359 384 if (verbosity.gt.0) then 360 385 if (verbosity.gt.1) then 361 CALL SYSTEM_CLOCK(count_clock, count_rate, count_max)362 write(*,*) 'S YSTEM_CLOCK',(count_clock - count_clock0)/real(count_rate) !, count_rate, count_max386 call system_clock(count_clock, count_rate, count_max) 387 write(*,*) 'System clock',(count_clock - count_clock0)/real(count_rate) !, count_rate, count_max 363 388 endif 364 389 if (info_flag.eq.1) then 365 print*, ' info only mode (stop)'390 print*, 'Info only mode (stop)' 366 391 stop 367 392 endif … … 373 398 write(*,*) 'CONGRATULATIONS: YOU HAVE SUCCESSFULLY COMPLETED A FLEXPART MODEL RUN!' 374 399 400 ! output wall time 401 if (verbosity .gt. 0) then 402 call system_clock(count_clock,count_rate) 403 tins=(count_clock - count_clock0)/real(count_rate) 404 print*,'Wall time ',tins,'s, ',tins/60,'min, ',tins/3600,'h.' 405 endif 406 375 407 end program flexpart -
trunk/src/com_mod.f90
r27 r30 113 113 ! lagespectra 1 if age spectra calculation switched on, 2 if not 114 114 115 integer :: lnetcdfout 116 ! lnetcdfout 1 for netcdf grid output, 0 if not. Set in COMMAND (namelist input) 115 117 116 118 integer :: nageclass,lage(maxageclass) … … 687 689 integer :: info_flag=0 688 690 integer :: count_clock, count_clock0, count_rate, count_max 691 real :: tins 689 692 logical :: nmlout=.true. 690 693 -
trunk/src/makefile
r24 r30 9 9 #FFLAGS = -fbounds-check -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -I$(INCPATH) 10 10 LDFLAGS = $(FFLAGS) -L$(LIBPATH2) -L$(LIBPATH1) -lgrib_api_f90 -lgrib_api -lm -ljasper 11 12 11 13 12 MODOBJS = \ -
trunk/src/readcommand.f90
r27 r30 109 109 nested_output, & 110 110 linit_cond, & 111 lnetcdfout, & 111 112 surf_only 112 113 … … 138 139 nested_output=0 139 140 linit_cond=0 141 lnetcdfout=0 140 142 surf_only=0 141 143 … … 344 346 endif 345 347 348 ! check for netcdf output switch (use for non-namelist input only!) 349 if (iout.ge.8) then 350 lnetcdfout = 1 351 iout = iout - 8 352 #ifndef NETCDF_OUTPUT 353 print*,'ERROR: netcdf output not activated during compile time but used in COMMAND file!' 354 print*,'Please recompile with netcdf library or use standard output format.' 355 stop 356 #endif 357 endif 358 346 359 ! Check whether a valid option for gridded model output has been chosen 347 360 !********************************************************************** … … 349 362 if ((iout.lt.1).or.(iout.gt.5)) then 350 363 write(*,*) ' #### FLEXPART MODEL ERROR! FILE COMMAND: #### ' 351 write(*,*) ' #### IOUT MUST BE 1, 2, 3, 4, OR 5! #### ' 364 write(*,*) ' #### IOUT MUST BE 1, 2, 3, 4, OR 5 FOR #### ' 365 write(*,*) ' #### STANDARD FLEXPART OUTPUT OR 9 - 13 #### ' 366 write(*,*) ' #### FOR NETCDF OUTPUT #### ' 352 367 stop 353 368 endif … … 361 376 stop 362 377 endif 363 364 378 365 379 -
trunk/src/timemanager.f90
r27 r30 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 * 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 * 47 49 !***************************************************************************** 48 50 ! * 49 51 ! Variables: * 50 ! DEP.true. if either wet or dry deposition is switched on *52 ! dep .true. if either wet or dry deposition is switched on * 51 53 ! decay(maxspec) [1/s] decay constant for radioactive decay * 52 ! DRYDEP.true. if dry deposition is switched on *54 ! drydep .true. if dry deposition is switched on * 53 55 ! ideltas [s] modelling period * 54 56 ! itime [s] actual temporal position of calculation * … … 70 72 ! prob probability of absorption at ground due to dry * 71 73 ! deposition * 72 ! WETDEP.true. if wet deposition is switched on *74 ! wetdep .true. if wet deposition is switched on * 73 75 ! weight weight for each concentration sample (1/2 or 1) * 74 76 ! uap(maxpart),ucp(maxpart),uzp(maxpart) = random velocities due to * … … 92 94 use par_mod 93 95 use com_mod 96 #ifdef NETCDF_OUTPUT 97 use netcdf_output_mod, only: concoutput_netcdf, concoutput_nest_netcdf,concoutput_surf_netcdf, concoutput_surf_nest_netcdf 98 #endif 94 99 95 100 implicit none … … 129 134 130 135 136 itime=0 131 137 !write(*,45) itime,numpart,gridtotalunc,wetgridtotalunc,drygridtotalunc 132 138 write(*,46) float(itime)/3600,itime,numpart … … 141 147 do itime=0,ideltas,lsynctime 142 148 143 144 149 ! Computation of wet deposition, OH reaction and mass transfer 145 150 ! between two species every lsynctime seconds … … 152 157 !******************************************************************** 153 158 154 if ( WETDEP.and. itime .ne. 0 .and. numpart .gt. 0) then159 if (wetdep .and. itime .ne. 0 .and. numpart .gt. 0) then 155 160 if (verbosity.gt.0) then 156 161 write (*,*) 'timemanager> call wetdepo' … … 159 164 endif 160 165 161 if ( OHREA.and. itime .ne. 0 .and. numpart .gt. 0) &166 if (ohrea .and. itime .ne. 0 .and. numpart .gt. 0) & 162 167 call ohreaction(itime,lsynctime,loutnext) 163 168 164 if ( ASSSPEC.and. itime .ne. 0 .and. numpart .gt. 0) then169 if (assspec .and. itime .ne. 0 .and. numpart .gt. 0) then 165 170 stop 'associated species not yet implemented!' 166 171 ! call transferspec(itime,lsynctime,loutnext) … … 240 245 !*********************************************************************** 241 246 242 if ( DEP.and.(itime.eq.loutnext).and.(ldirect.gt.0)) then247 if (dep.and.(itime.eq.loutnext).and.(ldirect.gt.0)) then 243 248 do ks=1,nspec 244 249 do kp=1,maxpointspec_act … … 350 355 if ((iout.le.3.).or.(iout.eq.5)) then 351 356 if (surf_only.ne.1) then 352 call concoutput(itime,outnum,gridtotalunc, & 353 wetgridtotalunc,drygridtotalunc) 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 354 364 else 355 if (verbosity.eq.1) then 356 print*,'call concoutput_surf ' 357 CALL SYSTEM_CLOCK(count_clock) 358 WRITE(*,*) 'SYSTEM_CLOCK',count_clock - count_clock0 359 endif 360 call concoutput_surf(itime,outnum,gridtotalunc, & 361 wetgridtotalunc,drygridtotalunc) 362 if (verbosity.eq.1) then 363 print*,'called concoutput_surf ' 364 CALL SYSTEM_CLOCK(count_clock) 365 WRITE(*,*) 'SYSTEM_CLOCK',count_clock - count_clock0 366 endif 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 367 382 endif 368 383 369 if ((nested_output.eq.1).and.(surf_only.ne.1)) call concoutput_nest(itime,outnum) 370 if ((nested_output.eq.1).and.(surf_only.eq.1)) call concoutput_surf_nest(itime,outnum) 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 371 401 outnum=0. 372 402 endif … … 474 504 !**************************** 475 505 476 xold= xtra1(j)477 yold= ytra1(j)506 xold=real(xtra1(j)) 507 yold=real(ytra1(j)) 478 508 zold=ztra1(j) 479 509 … … 515 545 endif 516 546 517 if ( DRYDEPSPEC(ks)) then ! dry deposition547 if (drydepspec(ks)) then ! dry deposition 518 548 drydeposit(ks)=xmass1(j,ks)*prob(ks)*decfact 519 549 xmass1(j,ks)=xmass1(j,ks)*(1.-prob(ks))*decfact … … 526 556 endif 527 557 528 529 558 if (mdomainfill.eq.0) then 530 559 if (xmass(npoint(j),ks).gt.0.) & … … 538 567 if (xmassfract.lt.0.0001) then ! terminate all particles carrying less mass 539 568 itra1(j)=-999999999 569 if (verbosity.gt.0) then 570 print*,'terminated particle ',j,' for small mass' 571 endif 540 572 endif 541 573 542 574 ! Sabine Eckhardt, June 2008 543 575 ! don't create depofield for backward runs 544 if (DRYDEP.AND.(ldirect.eq.1)) then 545 call drydepokernel(nclass(j),drydeposit,real(xtra1(j)), & 546 real(ytra1(j)),nage,kp) 547 if (nested_output.eq.1) call drydepokernel_nest( & 548 nclass(j),drydeposit,real(xtra1(j)),real(ytra1(j)), & 549 nage,kp) 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 550 581 endif 551 582 … … 554 585 555 586 if (abs(itra1(j)-itramem(j)).ge.lage(nageclass)) then 556 if (linit_cond.ge.1) & 557 call initial_cond_calc(itime+lsynctime,j) 587 if (linit_cond.ge.1) call initial_cond_calc(itime+lsynctime,j) 558 588 itra1(j)=-999999999 589 if (verbosity.gt.0) then 590 print*,'terminated particle ',j,' for age' 591 endif 559 592 endif 560 593 endif … … 584 617 585 618 if (iflux.eq.1) then 586 619 deallocate(flux) 587 620 endif 588 if ( OHREA.eqv..TRUE.) then589 621 if (ohrea.eqv..TRUE.) then 622 deallocate(OH_field,OH_field_height) 590 623 endif 591 624 if (ldirect.gt.0) then 592 deallocate(drygridunc,wetgridunc)625 deallocate(drygridunc,wetgridunc) 593 626 endif 594 627 deallocate(gridunc) … … 597 630 deallocate(xmasssave) 598 631 if (nested_output.eq.1) then 599 600 601 deallocate(griduncn,drygriduncn,wetgriduncn)602 632 deallocate(orooutn, arean, volumen) 633 if (ldirect.gt.0) then 634 deallocate(griduncn,drygriduncn,wetgriduncn) 635 endif 603 636 endif 604 637 deallocate(outheight,outheighthalf) 605 deallocate(oroout, area,volume)638 deallocate(oroout,area,volume) 606 639 607 640 end subroutine timemanager
Note: See TracChangeset
for help on using the changeset viewer.