source: trunk/mars/libf/phymars/meso_dustlift.F @ 73

Last change on this file since 73 was 49, checked in by aslmd, 15 years ago

mars: mise a jour README

File size: 4.1 KB
RevLine 
[42]1      SUBROUTINE dustlift(ngrid,nlay,nq,rho,
2     $                  pcdh_true,pcdh,co2ice,
3     $                  dqslift)
4      IMPLICIT NONE
5
6c=======================================================================
7c
8c  Dust lifting by surface winds
9c  Computing flux to the middle of the first layer
10c  (Called by vdifc)
11c
12c=======================================================================
13
14c-----------------------------------------------------------------------
15c   declarations:
16c   -------------
17
18#include "dimensions.h"
19#include "dimphys.h"
20#include "comcstfi.h"
21#include "tracer.h"
22
23c
24c   arguments:
25c   ----------
26
27c   INPUT
28      integer ngrid, nlay, nq 
29      real rho(ngrid)  ! density (kg.m-3) at surface
30      real pcdh_true(ngrid) ! Cd
31      real pcdh(ngrid) ! Cd * |V|
32      real co2ice(ngrid)
33
34c   OUTPUT
35      real dqslift(ngrid,nq) !surface dust flux to mid-layer (<0 when lifing)
36c     real pb(ngrid,nlay) ! diffusion to surface coeff.
37
38c   local:
39c   ------
40      INTEGER ig,iq
41      REAL fhoriz(ngridmx)  ! Horizontal dust flux
42      REAL ust,us
43      REAL stress_seuil
44      SAVE stress_seuil
45c      DATA stress_seuil/0.0225/   ! stress seuil soulevement (N.m2)
46!****WRF
47!****WRF: additional ASCII file to define dust opacity
48          REAL alpha
49          INTEGER ierr
50          OPEN(99,file='stress.def',status='old',form='formatted'
51     .     ,iostat=ierr)
52          IF(ierr.NE.0) THEN
53             stress_seuil = 0.0225
54             alpha = 1.
55             write(*,*) 'No file stress.def - set ', stress_seuil, alpha
56             !stop
57          ELSE
58             READ(99,*) stress_seuil
59             READ(99,*) alpha
60             write(*,*) 'definir seuil stress : ', stress_seuil, alpha
61             CLOSE(99)
62          ENDIF
63          alpha_lift(1) = alpha
64!****WRF
65!****WRF
66
67
68
69c     ---------------------------------
70c     Computing horizontal flux: fhoriz
71c     ---------------------------------
72
73      do ig=1,ngrid
74          fhoriz(ig) = 0.      ! initialisation
75
76c         Selection of points where surface dust is available
77c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78c         if (latid(ig).ge.80.) goto 99  ! N permanent  polar caps
79c         if (latid(ig).le.-80.) goto 99 ! S polar deposits
80c         if  ((longd(ig).ge.-141. .and. longd(ig).le.-127.)
81c    &   .and.(latid(ig).ge.12.   .and. latid(ig).le.23.))goto 99 ! olympus
82c         if  ((longd(ig).ge.-125. .and. longd(ig).le.-118.)
83c    &   .and.(latid(ig).ge.-12.   .and. latid(ig).le.-6.))goto 99 ! Arsia
84c         if  ((longd(ig).ge.-116. .and. longd(ig).le.-109.)
85c    &   .and.(latid(ig).ge.-5.   .and. latid(ig).le. 5.))goto 99 ! pavonis
86c         if  ((longd(ig).ge.-109. .and. longd(ig).le.-100.)
87c    &   .and.(latid(ig).ge. 7.   .and. latid(ig).le. 16.))goto 99 ! ascraeus
88c         if  ((longd(ig).ge.  61. .and. longd(ig).le.  63.)
89c    &   .and.(latid(ig).ge. 63. .and. latid(ig).le. 64.))goto 99 !weird point
90          if (co2ice(ig).gt.0.) goto 99
91
92
93c         Is the wind strong enough ?
94c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
95          ust = sqrt(stress_seuil/rho(ig))
96          us = pcdh(ig) /  sqrt(pcdh_true(ig)) ! ustar=cd*v /sqrt(cd)
97          if (us.gt.ust) then
98c            If lifting ?
99c            Calcul du flux suivant Marticorena ( en fait white (1979))
100
101             fhoriz(ig) = 2.61*(rho(ig)/g) *
102     &      (us -ust) * (us + ust)**2
103          end if
104 99      continue
105      end do
106
107c     -------------------------------------
108c     Computing vertical flux and diffusion
109c     -------------------------------------
110 
111       do iq=1,nq
112         do ig=1,ngrid
113             dqslift(ig,iq)= -alpha_lift(iq)* fhoriz(ig)
114
115
116cc  le  flux vertical remplace le terme de diffusion turb. qui est mis a zero
117c            zb(ig,1) = 0.
118cc           If surface deposition by turbulence diffusion (impaction...)
119cc           if(fhoriz(ig).ne.0) then
120cc           zb(ig,1) = zcdh(ig)*zb0(ig,1)
121cc           AMount of Surface deposition !
122cc           pdqs_dif(ig,iq)=pdqs_dif(ig,iq) +
123cc    &      zb(ig,1)*zq(ig,1,iq)/ptimestep
124cc          write(*,*) 'zb(1)  = ' ,  zb(ig,1),zcdh(ig),zb0(ig,1)
125cc
126
127         enddo
128       enddo
129
130      RETURN
131      END
132
Note: See TracBrowser for help on using the repository browser.