[626] | 1 | SUBROUTINE watercloud(ngrid,nlay, ptimestep, |
---|
[38] | 2 | & pplev,pplay,pdpsrf,pzlev,pzlay,pt,pdt, |
---|
[626] | 3 | & pq,pdq,pdqcloud,pdtcloud, |
---|
[358] | 4 | & nq,tau,tauscaling,rdust,rice,nuice, |
---|
| 5 | & rsedcloud,rhocloud) |
---|
[38] | 6 | IMPLICIT NONE |
---|
| 7 | |
---|
| 8 | c======================================================================= |
---|
[358] | 9 | c Water-ice cloud formation |
---|
| 10 | c |
---|
| 11 | c Includes two different schemes: |
---|
| 12 | c - A simplified scheme (see simpleclouds.F) |
---|
| 13 | c - An improved microphysical scheme (see improvedclouds.F) |
---|
[38] | 14 | c |
---|
[358] | 15 | c Authors: Franck Montmessin, Francois Forget, Ehouarn Millour, |
---|
[522] | 16 | c J.-B. Madeleine, Thomas Navarro |
---|
[38] | 17 | c |
---|
[626] | 18 | c 2004 - Oct. 2011 |
---|
[38] | 19 | c======================================================================= |
---|
| 20 | |
---|
| 21 | c----------------------------------------------------------------------- |
---|
| 22 | c declarations: |
---|
| 23 | c ------------- |
---|
| 24 | |
---|
| 25 | #include "dimensions.h" |
---|
| 26 | #include "dimphys.h" |
---|
| 27 | #include "comcstfi.h" |
---|
| 28 | #include "callkeys.h" |
---|
| 29 | #include "tracer.h" |
---|
| 30 | #include "comgeomfi.h" |
---|
[358] | 31 | #include "dimradmars.h" |
---|
[38] | 32 | |
---|
| 33 | c Inputs: |
---|
| 34 | c ------ |
---|
| 35 | |
---|
| 36 | INTEGER ngrid,nlay |
---|
[626] | 37 | integer nq ! nombre de traceurs |
---|
[38] | 38 | REAL ptimestep ! pas de temps physique (s) |
---|
| 39 | REAL pplev(ngrid,nlay+1) ! pression aux inter-couches (Pa) |
---|
| 40 | REAL pplay(ngrid,nlay) ! pression au milieu des couches (Pa) |
---|
[626] | 41 | REAL pdpsrf(ngrid) ! tendance surf pressure |
---|
[38] | 42 | REAL pzlev(ngrid,nlay+1) ! altitude at layer boundaries |
---|
| 43 | REAL pzlay(ngrid,nlay) ! altitude at the middle of the layers |
---|
| 44 | REAL pt(ngrid,nlay) ! temperature at the middle of the layers (K) |
---|
[626] | 45 | REAL pdt(ngrid,nlay) ! tendance temperature des autres param. |
---|
[38] | 46 | |
---|
| 47 | real pq(ngrid,nlay,nq) ! traceur (kg/kg) |
---|
[626] | 48 | real pdq(ngrid,nlay,nq) ! tendance avant condensation (kg/kg.s-1) |
---|
[38] | 49 | |
---|
[626] | 50 | REAL tau(ngridmx,naerkind) ! Column dust optical depth at each point |
---|
| 51 | REAL tauscaling(ngridmx) ! Convertion factor for dust amount |
---|
| 52 | real rdust(ngridmx,nlayermx) ! Dust geometric mean radius (m) |
---|
[38] | 53 | |
---|
| 54 | c Outputs: |
---|
| 55 | c ------- |
---|
| 56 | |
---|
[626] | 57 | real pdqcloud(ngrid,nlay,nq) ! tendance de la condensation H2O(kg/kg.s-1) |
---|
| 58 | REAL pdtcloud(ngrid,nlay) ! tendance temperature due |
---|
| 59 | ! a la chaleur latente |
---|
[38] | 60 | |
---|
| 61 | REAL rice(ngrid,nlay) ! Ice mass mean radius (m) |
---|
| 62 | ! (r_c in montmessin_2004) |
---|
| 63 | REAL nuice(ngrid,nlay) ! Estimated effective variance |
---|
| 64 | ! of the size distribution |
---|
[626] | 65 | real rsedcloud(ngridmx,nlayermx) ! Cloud sedimentation radius |
---|
| 66 | real rhocloud(ngridmx,nlayermx) ! Cloud density (kg.m-3) |
---|
[38] | 67 | |
---|
| 68 | c local: |
---|
| 69 | c ------ |
---|
| 70 | |
---|
[626] | 71 | INTEGER ig,l |
---|
[38] | 72 | LOGICAL,SAVE :: firstcall=.true. |
---|
| 73 | |
---|
| 74 | c ** un petit test de coherence |
---|
| 75 | c -------------------------- |
---|
| 76 | |
---|
| 77 | IF (firstcall) THEN |
---|
| 78 | IF(ngrid.NE.ngridmx) THEN |
---|
| 79 | PRINT*,'STOP dans watercloud' |
---|
| 80 | PRINT*,'probleme de dimensions :' |
---|
| 81 | PRINT*,'ngrid =',ngrid |
---|
| 82 | PRINT*,'ngridmx =',ngridmx |
---|
| 83 | STOP |
---|
| 84 | ENDIF |
---|
| 85 | |
---|
| 86 | if (nq.gt.nqmx) then |
---|
| 87 | write(*,*) 'stop in watercloud (nq.gt.nqmx)!' |
---|
| 88 | write(*,*) 'nq=',nq,' nqmx=',nqmx |
---|
| 89 | stop |
---|
| 90 | endif |
---|
| 91 | |
---|
[358] | 92 | write(*,*) "watercloud: igcm_h2o_vap=",igcm_h2o_vap |
---|
| 93 | write(*,*) " igcm_h2o_ice=",igcm_h2o_ice |
---|
[38] | 94 | |
---|
| 95 | firstcall=.false. |
---|
| 96 | ENDIF ! of IF (firstcall) |
---|
[522] | 97 | |
---|
[38] | 98 | |
---|
[626] | 99 | c Main call to the different cloud schemes: |
---|
| 100 | IF (microphys) THEN |
---|
| 101 | CALL improvedclouds(ngrid,nlay,ptimestep, |
---|
| 102 | & pplev,pplay,pt,pdt, |
---|
| 103 | & pq,pdq,pdqcloud,pdtcloud, |
---|
[358] | 104 | & nq,tauscaling,rdust,rice,nuice, |
---|
| 105 | & rsedcloud,rhocloud) |
---|
[626] | 106 | ELSE |
---|
| 107 | CALL simpleclouds(ngrid,nlay,ptimestep, |
---|
| 108 | & pplev,pplay,pzlev,pzlay,pt,pdt, |
---|
| 109 | & pq,pdq,pdqcloud,pdtcloud, |
---|
[358] | 110 | & nq,tau,rice,nuice,rsedcloud) |
---|
[626] | 111 | ENDIF |
---|
[522] | 112 | |
---|
[38] | 113 | |
---|
[358] | 114 | c A correction if a lot of subliming CO2 fills the 1st layer FF04/2005 |
---|
| 115 | c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
| 116 | c Then that should not affect the ice particle radius |
---|
| 117 | do ig=1,ngridmx |
---|
| 118 | if(pdpsrf(ig)*ptimestep.gt.0.9*(pplev(ig,1)-pplev(ig,2)))then |
---|
| 119 | if(pdpsrf(ig)*ptimestep.gt.0.9*(pplev(ig,1)-pplev(ig,3))) |
---|
| 120 | & rice(ig,2)=rice(ig,3) |
---|
| 121 | rice(ig,1)=rice(ig,2) |
---|
| 122 | end if |
---|
| 123 | end do |
---|
[38] | 124 | |
---|
[626] | 125 | RETURN |
---|
[38] | 126 | END |
---|
| 127 | |
---|