[42] | 1 | SUBROUTINE dustlift(ngrid,nlay,nq,rho, |
---|
| 2 | $ pcdh_true,pcdh,co2ice, |
---|
| 3 | $ dqslift) |
---|
| 4 | IMPLICIT NONE |
---|
| 5 | |
---|
| 6 | c======================================================================= |
---|
| 7 | c |
---|
| 8 | c Dust lifting by surface winds |
---|
| 9 | c Computing flux to the middle of the first layer |
---|
| 10 | c (Called by vdifc) |
---|
| 11 | c |
---|
| 12 | c======================================================================= |
---|
| 13 | |
---|
| 14 | c----------------------------------------------------------------------- |
---|
| 15 | c declarations: |
---|
| 16 | c ------------- |
---|
| 17 | |
---|
| 18 | #include "dimensions.h" |
---|
| 19 | #include "dimphys.h" |
---|
| 20 | #include "comcstfi.h" |
---|
| 21 | #include "tracer.h" |
---|
| 22 | |
---|
| 23 | c |
---|
| 24 | c arguments: |
---|
| 25 | c ---------- |
---|
| 26 | |
---|
| 27 | c 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 | |
---|
| 34 | c OUTPUT |
---|
| 35 | real dqslift(ngrid,nq) !surface dust flux to mid-layer (<0 when lifing) |
---|
| 36 | c real pb(ngrid,nlay) ! diffusion to surface coeff. |
---|
| 37 | |
---|
| 38 | c local: |
---|
| 39 | c ------ |
---|
| 40 | INTEGER ig,iq |
---|
| 41 | REAL fhoriz(ngridmx) ! Horizontal dust flux |
---|
| 42 | REAL ust,us |
---|
| 43 | REAL stress_seuil |
---|
| 44 | SAVE stress_seuil |
---|
| 45 | c 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 |
---|
[76] | 54 | !!!! defini dans initracer |
---|
| 55 | ! alpha = 1. |
---|
| 56 | write(*,*) 'No file stress.def - set ', |
---|
| 57 | . stress_seuil, alpha_lift |
---|
[42] | 58 | !stop |
---|
| 59 | ELSE |
---|
| 60 | READ(99,*) stress_seuil |
---|
| 61 | READ(99,*) alpha |
---|
| 62 | write(*,*) 'definir seuil stress : ', stress_seuil, alpha |
---|
| 63 | CLOSE(99) |
---|
[76] | 64 | alpha_lift(1) = alpha |
---|
[42] | 65 | ENDIF |
---|
| 66 | !****WRF |
---|
| 67 | !****WRF |
---|
| 68 | |
---|
| 69 | |
---|
| 70 | |
---|
| 71 | c --------------------------------- |
---|
| 72 | c Computing horizontal flux: fhoriz |
---|
| 73 | c --------------------------------- |
---|
| 74 | |
---|
| 75 | do ig=1,ngrid |
---|
| 76 | fhoriz(ig) = 0. ! initialisation |
---|
| 77 | |
---|
| 78 | c Selection of points where surface dust is available |
---|
| 79 | c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
| 80 | c if (latid(ig).ge.80.) goto 99 ! N permanent polar caps |
---|
| 81 | c if (latid(ig).le.-80.) goto 99 ! S polar deposits |
---|
| 82 | c if ((longd(ig).ge.-141. .and. longd(ig).le.-127.) |
---|
| 83 | c & .and.(latid(ig).ge.12. .and. latid(ig).le.23.))goto 99 ! olympus |
---|
| 84 | c if ((longd(ig).ge.-125. .and. longd(ig).le.-118.) |
---|
| 85 | c & .and.(latid(ig).ge.-12. .and. latid(ig).le.-6.))goto 99 ! Arsia |
---|
| 86 | c if ((longd(ig).ge.-116. .and. longd(ig).le.-109.) |
---|
| 87 | c & .and.(latid(ig).ge.-5. .and. latid(ig).le. 5.))goto 99 ! pavonis |
---|
| 88 | c if ((longd(ig).ge.-109. .and. longd(ig).le.-100.) |
---|
| 89 | c & .and.(latid(ig).ge. 7. .and. latid(ig).le. 16.))goto 99 ! ascraeus |
---|
| 90 | c if ((longd(ig).ge. 61. .and. longd(ig).le. 63.) |
---|
| 91 | c & .and.(latid(ig).ge. 63. .and. latid(ig).le. 64.))goto 99 !weird point |
---|
| 92 | if (co2ice(ig).gt.0.) goto 99 |
---|
| 93 | |
---|
| 94 | |
---|
| 95 | c Is the wind strong enough ? |
---|
| 96 | c ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
| 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 |
---|
| 100 | c If lifting ? |
---|
| 101 | c 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 | |
---|
| 109 | c ------------------------------------- |
---|
| 110 | c Computing vertical flux and diffusion |
---|
| 111 | c ------------------------------------- |
---|
| 112 | |
---|
| 113 | do iq=1,nq |
---|
| 114 | do ig=1,ngrid |
---|
| 115 | dqslift(ig,iq)= -alpha_lift(iq)* fhoriz(ig) |
---|
| 116 | |
---|
| 117 | |
---|
| 118 | cc le flux vertical remplace le terme de diffusion turb. qui est mis a zero |
---|
| 119 | c zb(ig,1) = 0. |
---|
| 120 | cc If surface deposition by turbulence diffusion (impaction...) |
---|
| 121 | cc if(fhoriz(ig).ne.0) then |
---|
| 122 | cc zb(ig,1) = zcdh(ig)*zb0(ig,1) |
---|
| 123 | cc AMount of Surface deposition ! |
---|
| 124 | cc pdqs_dif(ig,iq)=pdqs_dif(ig,iq) + |
---|
| 125 | cc & zb(ig,1)*zq(ig,1,iq)/ptimestep |
---|
| 126 | cc write(*,*) 'zb(1) = ' , zb(ig,1),zcdh(ig),zb0(ig,1) |
---|
| 127 | cc |
---|
| 128 | |
---|
| 129 | enddo |
---|
| 130 | enddo |
---|
| 131 | |
---|
| 132 | RETURN |
---|
| 133 | END |
---|
| 134 | |
---|