source: trunk/LMDZ.MARS/libf/phymars/dustlift.F @ 288

Last change on this file since 288 was 86, checked in by aslmd, 14 years ago

*
mars + LMD_MM_MARS
* Precompilation flag MESOSCALE for better transparency

* in shared phymars between GCM and mesoscale model

*

M 85 mars/libf/phymars/meso_physiq.F
M 85 mars/libf/phymars/meso_inifis.F
Added a pre-compilation flag MESOSCALE so that the LMDZ.MARS GCM
will compile without stating errors because of mesoscale routines.

M 85 mars/libf/phymars/newcondens.F
M 85 mars/libf/phymars/testphys1d.F
M 85 mars/libf/phymars/dustlift.F
D 85 mars/libf/phymars/meso_testphys1d.F
D 85 mars/libf/phymars/meso_dustlift.F
D 85 mars/libf/phymars/meso_newcondens.F
Now, this MESOSCALE precompilation flag can be used to lower
the number of meso_* routines when adaptations for mesoscale
applications are not very extended.
--> Three meso_* routines were deleted and changes are
now impacted under the MESOSCALE flag in the original GCM routines
--> Completely transparent for GCM compilation since it is devoid
of the -DMESOSCALE option
--> Very good for syncing because changes in dustlift, newcondens
will be directly available in the mesoscale model

M 84 mesoscale/LMD_MM_MARS/makemeso
Changed meso_testphys1d in testphys1d

M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new/makegcm_pgf
M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new/makegcm_mpifort
M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new/makegcm_ifort
M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new/makegcm_g95
M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/mars_lmd_new/makegcm_mpi
Added the option -DMESOSCALE in these scripts

*
LMD_MM_MARS
* Various minor changes related to water cycle and plotting routines

* Also included the GW test case

*

A 0 mesoscale/LMDZ.MARS.new/myGCM/DEFS_JB/callphys.def.orig
M 84 mesoscale/NOTES.txt
D 84 mesoscale/LMD_MM_MARS/SRC/ARWpost/idl
M 84 mesoscale/LMD_MM_MARS/SRC/WRFV2/Registry/Registry.EM
M 84 mesoscale/LMD_MM_MARS/SIMU/gnome_launch.meso
M 85 mesoscale/PLOT/MINIMAL/map_latlon.pro
D 85 mesoscale/PLOT/SPEC/LES/getget.pro
M 85 mesoscale/PLOT/SPEC/MAP/map_uvt.pro
A + - mesoscale/PLOT/SPEC/getget.pro
A 0 mesoscale/PLOT/RESERVE/obsolete
A 0 mesoscale/TESTS/TESTGW.tar.gz
M 84 000-USERS

File size: 4.0 KB
Line 
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
45      DATA stress_seuil/0.0225/   ! stress seuil soulevement (N.m2)
46
47#ifdef MESOSCALE
48!!!! AS: In the mesoscale model we'd like to easily set
49!!!! AS: ... stress for lifting
50!!!! AS: you have to compile with -DMESOSCALE to do so
51      REAL alpha
52      INTEGER ierr
53        OPEN(99,file='stress.def',status='old',form='formatted'
54     .   ,iostat=ierr)
55        !!! no file => default values
56        IF(ierr.EQ.0) THEN
57          READ(99,*) stress_seuil
58          READ(99,*) alpha
59          write(*,*) 'USER-DEFINED threshold: ', stress_seuil, alpha
60          CLOSE(99)
61          alpha_lift(1:nq) = alpha
62        ENDIF
63#endif
64
65c     ---------------------------------
66c     Computing horizontal flux: fhoriz
67c     ---------------------------------
68
69      do ig=1,ngrid
70          fhoriz(ig) = 0.      ! initialisation
71
72c         Selection of points where surface dust is available
73c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74c         if (latid(ig).ge.80.) goto 99  ! N permanent  polar caps
75c         if (latid(ig).le.-80.) goto 99 ! S polar deposits
76c         if  ((longd(ig).ge.-141. .and. longd(ig).le.-127.)
77c    &   .and.(latid(ig).ge.12.   .and. latid(ig).le.23.))goto 99 ! olympus
78c         if  ((longd(ig).ge.-125. .and. longd(ig).le.-118.)
79c    &   .and.(latid(ig).ge.-12.   .and. latid(ig).le.-6.))goto 99 ! Arsia
80c         if  ((longd(ig).ge.-116. .and. longd(ig).le.-109.)
81c    &   .and.(latid(ig).ge.-5.   .and. latid(ig).le. 5.))goto 99 ! pavonis
82c         if  ((longd(ig).ge.-109. .and. longd(ig).le.-100.)
83c    &   .and.(latid(ig).ge. 7.   .and. latid(ig).le. 16.))goto 99 ! ascraeus
84c         if  ((longd(ig).ge.  61. .and. longd(ig).le.  63.)
85c    &   .and.(latid(ig).ge. 63. .and. latid(ig).le. 64.))goto 99 !weird point
86          if (co2ice(ig).gt.0.) goto 99
87
88
89c         Is the wind strong enough ?
90c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
91          ust = sqrt(stress_seuil/rho(ig))
92          us = pcdh(ig) /  sqrt(pcdh_true(ig)) ! ustar=cd*v /sqrt(cd)
93          if (us.gt.ust) then
94c            If lifting ?
95c            Calcul du flux suivant Marticorena ( en fait white (1979))
96
97             fhoriz(ig) = 2.61*(rho(ig)/g) *
98     &      (us -ust) * (us + ust)**2
99          end if
100 99      continue
101      end do
102
103c     -------------------------------------
104c     Computing vertical flux and diffusion
105c     -------------------------------------
106 
107       do iq=1,nq
108         do ig=1,ngrid
109             dqslift(ig,iq)= -alpha_lift(iq)* fhoriz(ig)
110
111
112cc  le  flux vertical remplace le terme de diffusion turb. qui est mis a zero
113c            zb(ig,1) = 0.
114cc           If surface deposition by turbulence diffusion (impaction...)
115cc           if(fhoriz(ig).ne.0) then
116cc           zb(ig,1) = zcdh(ig)*zb0(ig,1)
117cc           AMount of Surface deposition !
118cc           pdqs_dif(ig,iq)=pdqs_dif(ig,iq) +
119cc    &      zb(ig,1)*zq(ig,1,iq)/ptimestep
120cc          write(*,*) 'zb(1)  = ' ,  zb(ig,1),zcdh(ig),zb0(ig,1)
121cc
122
123         enddo
124       enddo
125
126      RETURN
127      END
128
Note: See TracBrowser for help on using the repository browser.