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

Last change on this file since 80 was 76, checked in by aslmd, 14 years ago

LMD_MM_MARS: remise a plat du traitement des traceurs terminee

[en particulier en vue de l'utilisation nouvelle physique]
--> fonctionnement concluant sur un cas Tharsis hydro 61x61x61
--> ne pas utiliser le cas FASTCASE trop instable avec traceurs
--> reste a tester l'effet d'especes radiativement actives

options dans namelist.input :
mars = 0 ---> pas de traceurs
mars = 1 ---> cycle de l'eau : water vapour + ice
mars = 2 ---> cycle poussieres : un dust bin
mars = 3 ---> cycle poussieres : dustq + dustn [NOUVELLE PHYS seulement]
mars = 11 ---> cycle de l'eau + poussieres [1+3] [NOUVELLE PHYS seulement]

NB: pour les deux derniers, reste un petit travail mineur sur qsurf

(voir dans module_lmd_driver.F)

il faut definir conjointement le callphys.def associe et relancer real.exe

(sinon on transporte juste dynamiquement des 'dummy' traceurs)

il n'est necessaire de recompiler que si le nombre total de traceurs change

Fichiers a mettre a jour si l'on ajoute une option "mars" dans le Registry


Attention suivant les inputs GCM, il faut peut etre egalement changer

  1. readmeteo.F90 dans PREP_MARS et 2. METGRID.TBL dans WPS/metgrid

M 75 mesoscale/LMD_MM_MARS/SRC/WRFV2/Registry/Registry.EM
---> definition du scenario et de l'ordre des traceurs dans SCALAR

M 75 mesoscale/LMD_MM_MARS/SRC/WRFV2/dyn_em/module_initialize_real.F
---> definition des interpolations verticales des champs de traceurs venant du GCM

M 75 mesoscale/LMD_MM_MARS/SRC/WRFV2/dyn_em/solve_em.F
---> definition du traitement a reserver aux bornes
---> --- dans les 4 scenarios precites, on passe aux bornes les champs du GCM

[y compris QH2O_ICE contrairement a ce qui etait par defaut precedemment]

---> --- les lignes relatives a un flux nul aux bornes sont laissees a un cas hypothetique mars>50

M 75 mesoscale/LMD_MM_MARS/SRC/WRFV2/phys/module_lmd_driver.F
---> definition de l'ordre correct des traceurs pour le passage a la physique
---> recuperation des tendances de la physique pour passage a la dynamique
---> NB: c'est dans ce module que sont presents des STOP si mars = 4-10 ou mars > 11

.... il faut donc modifier si l'on ajoute des options

M 75 mesoscale/LMD_MM_MARS/SRC/WRFV2/main/real_em.F
---> definition et calcul des champs a appliquer aux bornes
---> generalise desormais, il n'y a plus qu'a ajouter d'eventuelles nouvelles options 'mars'
---> .... des modifications sont necessaires si on passe plus de 4 traceurs aux bornes

M 75 mesoscale/LMD_MM_MARS/SIMU/runmeso
---> definition du bon nombre de traceurs dans la compilation de la physique puis l'execution

[l'option mars est lue par le script dans namelist.input]

Fichiers tests


A 0 mesoscale/TESTS/newphys_tracers/*
---> pour la nouvelle physique (ici seulement les fichiers def)
---> toutes les options precitees ont ete testes avec succes a l'execution [pas de crash]
---> ... plausibilite physique verifiee rapidement, PAS d'ANALYSE APPROFONDIE pour le moment

A 0 mesoscale/TESTS/LMD_MM_MARS_TESTCASE_water.tar.gz
---> pour l'ancienne physique (introduit precedemment mais n'avait pas ete synchronise)

M 75 mars/libf/phymars/meso_dustlift.F
NB: correction mineure, de facon a recuperer alpha_lift de initracer

File size: 4.2 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
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!!!! defini dans initracer
55!             alpha = 1.
56             write(*,*) 'No file stress.def - set ',
57     .                     stress_seuil, alpha_lift
58             !stop
59          ELSE
60             READ(99,*) stress_seuil
61             READ(99,*) alpha
62             write(*,*) 'definir seuil stress : ', stress_seuil, alpha
63             CLOSE(99)
64             alpha_lift(1) = alpha
65          ENDIF
66!****WRF
67!****WRF
68
69
70
71c     ---------------------------------
72c     Computing horizontal flux: fhoriz
73c     ---------------------------------
74
75      do ig=1,ngrid
76          fhoriz(ig) = 0.      ! initialisation
77
78c         Selection of points where surface dust is available
79c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80c         if (latid(ig).ge.80.) goto 99  ! N permanent  polar caps
81c         if (latid(ig).le.-80.) goto 99 ! S polar deposits
82c         if  ((longd(ig).ge.-141. .and. longd(ig).le.-127.)
83c    &   .and.(latid(ig).ge.12.   .and. latid(ig).le.23.))goto 99 ! olympus
84c         if  ((longd(ig).ge.-125. .and. longd(ig).le.-118.)
85c    &   .and.(latid(ig).ge.-12.   .and. latid(ig).le.-6.))goto 99 ! Arsia
86c         if  ((longd(ig).ge.-116. .and. longd(ig).le.-109.)
87c    &   .and.(latid(ig).ge.-5.   .and. latid(ig).le. 5.))goto 99 ! pavonis
88c         if  ((longd(ig).ge.-109. .and. longd(ig).le.-100.)
89c    &   .and.(latid(ig).ge. 7.   .and. latid(ig).le. 16.))goto 99 ! ascraeus
90c         if  ((longd(ig).ge.  61. .and. longd(ig).le.  63.)
91c    &   .and.(latid(ig).ge. 63. .and. latid(ig).le. 64.))goto 99 !weird point
92          if (co2ice(ig).gt.0.) goto 99
93
94
95c         Is the wind strong enough ?
96c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
97          ust = sqrt(stress_seuil/rho(ig))
98          us = pcdh(ig) /  sqrt(pcdh_true(ig)) ! ustar=cd*v /sqrt(cd)
99          if (us.gt.ust) then
100c            If lifting ?
101c            Calcul du flux suivant Marticorena ( en fait white (1979))
102
103             fhoriz(ig) = 2.61*(rho(ig)/g) *
104     &      (us -ust) * (us + ust)**2
105          end if
106 99      continue
107      end do
108
109c     -------------------------------------
110c     Computing vertical flux and diffusion
111c     -------------------------------------
112 
113       do iq=1,nq
114         do ig=1,ngrid
115             dqslift(ig,iq)= -alpha_lift(iq)* fhoriz(ig)
116
117
118cc  le  flux vertical remplace le terme de diffusion turb. qui est mis a zero
119c            zb(ig,1) = 0.
120cc           If surface deposition by turbulence diffusion (impaction...)
121cc           if(fhoriz(ig).ne.0) then
122cc           zb(ig,1) = zcdh(ig)*zb0(ig,1)
123cc           AMount of Surface deposition !
124cc           pdqs_dif(ig,iq)=pdqs_dif(ig,iq) +
125cc    &      zb(ig,1)*zq(ig,1,iq)/ptimestep
126cc          write(*,*) 'zb(1)  = ' ,  zb(ig,1),zcdh(ig),zb0(ig,1)
127cc
128
129         enddo
130       enddo
131
132      RETURN
133      END
134
Note: See TracBrowser for help on using the repository browser.