dry_deposition.F90 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. !#################################################################
  2. !
  3. ! Purpose:
  4. ! --------
  5. !
  6. ! This module contains all subroutines needed for dry deposition calculations.
  7. ! The mean purpose is to perform on a high resolution of 1x1 degree:
  8. !
  9. ! 0. allocate the vd on the model resolution
  10. !
  11. ! 1. read fields needed for further calculations in subroutines:
  12. !
  13. ! 2. calculate the tracer independent friction velocity, aerodynamic
  14. ! and sub-laminar resistance
  15. !
  16. ! 3. calculate fields needed for resistance calculations
  17. !
  18. ! 4. the tracer dependent vd
  19. !
  20. ! 5. coarsen the vd
  21. !
  22. ! 6. apply the coarsened deposition velocities to concentration field rm
  23. !
  24. ! 7. deallocate vd
  25. !
  26. ! Reference:
  27. ! ---------
  28. ! general documentationon ECMWF fields can be found on:
  29. ! http://www.ecmwf.int/research/ifsdocs/PHYSICS/
  30. ! ---------
  31. ! Authors:
  32. ! -------
  33. ! original code by Laurens Ganzeveld and Ad Jeuken (1997)
  34. ! revised and adapted for use in TM5 and use of ECMWF data
  35. ! by F. Dentener and M. Krol (2003)
  36. !
  37. ! 24 Jan 2012 - P. Le Sager - modified for mpi lat-lon domain decomposition
  38. !
  39. !### macro's #####################################################
  40. !
  41. #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
  42. #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
  43. #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
  44. !
  45. #include "tm5.inc"
  46. !
  47. !#################################################################
  48. module dry_deposition
  49. use GO , only : gol, goPr, goErr
  50. implicit none
  51. ! --- in/out ----------------------
  52. private
  53. public :: Dry_Deposition_Init, Dry_Deposition_Done
  54. public :: dd_surface_fields
  55. ! --- const -----------------------
  56. character(len=*), parameter :: mname = 'dry_deposition'
  57. contains
  58. subroutine Dry_Deposition_Init( status )
  59. ! --- in/out ------------------------------------
  60. integer, intent(out) :: status
  61. ! --- const -------------------------------------
  62. character(len=*), parameter :: rname = mname//'/Dry_Deposition_Init'
  63. ! --- local -------------------------------------
  64. ! ok
  65. status = 0
  66. end subroutine Dry_Deposition_Init
  67. subroutine Dry_Deposition_Done( status )
  68. ! --- in/out ------------------------------------
  69. integer, intent(out) :: status
  70. ! --- const -------------------------------------
  71. character(len=*), parameter :: rname = mname//'/Dry_Deposition_Done'
  72. ! ok
  73. status = 0
  74. end subroutine Dry_Deposition_Done
  75. subroutine dd_surface_fields( status )
  76. ! --- in/out -----------------------------
  77. integer, intent(out) :: status
  78. ! --- const -------------------------------
  79. character(len=*), parameter :: rname = 'dd_surface_fields'
  80. ! --- local ------------------------------
  81. ! ok
  82. status = 0
  83. end subroutine dd_surface_fields
  84. end module dry_deposition