Changeset 972 for LMDZ4/trunk/libf/phylmd/thermcell_dq.F90
- Timestamp:
- Jun 19, 2008, 12:24:22 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/thermcell_dq.F90
r938 r972 23 23 real qa(ngrid,nlay),detr(ngrid,nlay),wqd(ngrid,nlay+1) 24 24 25 real zzm 26 25 27 integer ig,k 28 real cfl 29 30 real qold(ngrid,nlay) 31 real ztimestep 32 integer niter,iter 33 34 35 36 ! Calcul du critere CFL pour l'advection dans la subsidence 37 do k=1,nlay 38 do ig=1,ngrid 39 zzm=masse(ig,k)/ptimestep 40 cfl=max(cfl,fm(ig,k)/zzm) 41 if (entr(ig,k).gt.zzm) then 42 print*,'entr dt > m ',entr(ig,k)*ptimestep,masse(ig,k) 43 stop 44 endif 45 enddo 46 enddo 47 48 !IM 090508 print*,'CFL CFL CFL CFL ',cfl 49 50 #undef CFL 51 #ifdef CFL 52 ! On subdivise le calcul en niter pas de temps. 53 niter=int(cfl)+1 54 #else 55 niter=1 56 #endif 57 58 ztimestep=ptimestep/niter 59 qold=q 60 61 62 do iter=1,niter 63 if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0' 26 64 27 65 ! calcul du detrainement 28 29 if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0'30 31 66 do k=1,nlay 32 67 do ig=1,ngrid … … 56 91 do k=2,nlay 57 92 do ig=1,ngrid 58 if ((fm(ig,k+1)+detr(ig,k))* ptimestep.gt. &93 if ((fm(ig,k+1)+detr(ig,k))*ztimestep.gt. & 59 94 & 1.e-5*masse(ig,k)) then 60 95 qa(ig,k)=(fm(ig,k)*qa(ig,k-1)+entr(ig,k)*q(ig,k)) & … … 72 107 enddo 73 108 109 ! Calcul du flux subsident 110 74 111 do k=2,nlay 75 112 do ig=1,ngrid 76 ! wqd(ig,k)=fm(ig,k)*0.5*(q(ig,k-1)+q(ig,k)) 113 #undef centre 114 #ifdef centre 115 wqd(ig,k)=fm(ig,k)*0.5*(q(ig,k-1)+q(ig,k)) 116 #else 117 118 #define plusqueun 119 #ifdef plusqueun 120 ! Schema avec advection sur plus qu'une maille. 121 zzm=masse(ig,k)/ztimestep 122 if (fm(ig,k)>zzm) then 123 wqd(ig,k)=zzm*q(ig,k)+(fm(ig,k)-zzm)*q(ig,k+1) 124 else 125 wqd(ig,k)=fm(ig,k)*q(ig,k) 126 endif 127 #else 77 128 wqd(ig,k)=fm(ig,k)*q(ig,k) 129 #endif 130 #endif 131 78 132 if (wqd(ig,k).lt.0.) then 79 133 ! print*,'wqd<0!!!' … … 86 140 enddo 87 141 142 143 ! Calcul des tendances 88 144 do k=1,nlay 89 145 do ig=1,ngrid 90 dq(ig,k)=(detr(ig,k)*qa(ig,k)-entr(ig,k)*q(ig,k) &146 q(ig,k)=q(ig,k)+(detr(ig,k)*qa(ig,k)-entr(ig,k)*q(ig,k) & 91 147 & -wqd(ig,k)+wqd(ig,k+1)) & 92 & /masse(ig,k)148 & *ztimestep/masse(ig,k) 93 149 ! if (dq(ig,k).lt.0.) then 94 150 ! print*,'dq<0!!!' … … 97 153 enddo 98 154 155 156 enddo 157 158 159 ! Calcul des tendances 160 do k=1,nlay 161 do ig=1,ngrid 162 dq(ig,k)=(q(ig,k)-qold(ig,k))/ptimestep 163 q(ig,k)=qold(ig,k) 164 enddo 165 enddo 166 99 167 return 100 168 end
Note: See TracChangeset
for help on using the changeset viewer.