- Timestamp:
- Jul 24, 2024, 2:54:37 PM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/lmdz_thermcell_down.F90
r5111 r5116 40 40 real, dimension(ngrid, nlay + 1) :: fup, fdn, fc, fthu, fthd, fthe, fthtot 41 41 real, dimension(ngrid, nlay) :: tracu, tracd, traci, tracold 42 real:: www, mstar_inv42 REAL :: www, mstar_inv 43 43 integer ig, ilay 44 44 real, dimension(ngrid, nlay) :: s1, s2, num !coefficients pour la resolution implicite 45 integer:: iflag_impl = 1 ! 0 pour explicite, 1 pour implicite "classique", 2 pour implicite avec entrainement et detrainement45 INTEGER :: iflag_impl = 1 ! 0 pour explicite, 1 pour implicite "classique", 2 pour implicite avec entrainement et detrainement 46 46 47 47 fdn(:, :) = 0. … … 60 60 num(:, :) = 1. 61 61 62 if (iflag_thermals_down < 10) then62 if (iflag_thermals_down < 10) THEN 63 63 CALL abort_physic("thermcell_updown_dq", & 64 64 'thermcell_down_dq = 0 or >= 10', 1) … … 74 74 do ig = 1, ngrid 75 75 !if ( lmax(ig) > nlay - 2 ) stop "les thermiques montent trop haut" 76 if (ilay<=lmax(ig) .and. lmax(ig)>1) then76 if (ilay<=lmax(ig) .and. lmax(ig)>1) THEN 77 77 fdn(ig, ilay) = fdn(ig, ilay + 1) + edn(ig, ilay) - ddn(ig, ilay) 78 if (fdn(ig, ilay) + ddn(ig, ilay) > 0.) then78 if (fdn(ig, ilay) + ddn(ig, ilay) > 0.) THEN 79 79 www = fdn(ig, ilay + 1) / (fdn(ig, ilay) + ddn(ig, ilay)) 80 80 else … … 90 90 do ilay = 1, nlay, 1 91 91 do ig = 1, ngrid 92 if (ilay<lmax(ig) .and. lmax(ig)>1) then92 if (ilay<lmax(ig) .and. lmax(ig)>1) THEN 93 93 fup(ig, ilay + 1) = fup(ig, ilay) + eup(ig, ilay) - dup(ig, ilay) 94 if (fup(ig, ilay + 1) + dup(ig, ilay) > 0.) then94 if (fup(ig, ilay + 1) + dup(ig, ilay) > 0.) THEN 95 95 www = fup(ig, ilay) / (fup(ig, ilay + 1) + dup(ig, ilay)) 96 96 else 97 97 www = 0. 98 98 endif 99 if (ilay == 1) then99 if (ilay == 1) THEN 100 100 tracu(ig, ilay) = trac(ig, ilay) 101 101 else … … 126 126 !Boucle pour calculer le flux du traceur flux updraft, flux downdraft, flux compensatoire 127 127 !Methode explicite : 128 if(iflag_impl==0) then128 IF(iflag_impl==0) THEN 129 129 do ilay = 2, nlay, 1 130 130 do ig = 1, ngrid 131 131 !!!!ATTENTION HYPOTHESE de FLUX COMPENSATOIRE DESCENDANT ET DONC comme schema amont on va chercher trac au dessus!!!!! 132 132 !!!! tentative de prise en compte d'un flux compensatoire montant !!!! 133 if (fup(ig, ilay) - fdn(ig, ilay) < 0.) then133 if (fup(ig, ilay) - fdn(ig, ilay) < 0.) THEN 134 134 CALL abort_physic("thermcell_updown_dq", 'flux compensatoire '& 135 135 // 'montant, cas non traite par thermcell_updown_dq', 1) … … 152 152 153 153 !!! Reecriture du schéma explicite avec les notations du schéma implicite 154 else if(iflag_impl==-1) then155 write(*, *) 'nouveau schéma explicite !!!'154 else IF(iflag_impl==-1) THEN 155 WRITE(*, *) 'nouveau schéma explicite !!!' 156 156 !!! Calcul de s1 157 157 do ilay = 1, nlay … … 164 164 do ilay = 2, nlay, 1 165 165 do ig = 1, ngrid 166 if (fup(ig, ilay) - fdn(ig, ilay) < 0.) then166 if (fup(ig, ilay) - fdn(ig, ilay) < 0.) THEN 167 167 CALL abort_physic("thermcell_updown_dq", 'flux compensatoire ' & 168 168 // 'montant, cas non traite par thermcell_updown_dq', 1) … … 183 183 enddo !fin du calculer de la tendance du traceur avec la methode explicite 184 184 185 else if (iflag_impl==1) then185 else if (iflag_impl==1) THEN 186 186 do ilay = 1, nlay 187 187 do ig = 1, ngrid … … 193 193 do ilay = nlay - 1, 1, -1 194 194 do ig = 1, ngrid 195 if((fup(ig, ilay) - fdn(ig, ilay)) < 0) then196 write(*, *) 'flux compensatoire montant, cas non traite par thermcell_updown_dq dans le cas d une resolution implicite, ilay : ', ilay195 if((fup(ig, ilay) - fdn(ig, ilay)) < 0) THEN 196 WRITE(*, *) 'flux compensatoire montant, cas non traite par thermcell_updown_dq dans le cas d une resolution implicite, ilay : ', ilay 197 197 CALL abort_physic("thermcell_updown_dq", "", 1) 198 198 else … … 271 271 do ilay = nlay, 1, -1 272 272 do ig = 1, ngrid 273 if (ilay<=lmax(ig).and.lmax(ig)>1) then273 if (ilay<=lmax(ig).and.lmax(ig)>1) THEN 274 274 edn(ig, ilay) = fact_thermals_down * dup(ig, ilay) 275 275 ddn(ig, ilay) = fact_thermals_down * eup(ig, ilay)
Note: See TracChangeset
for help on using the changeset viewer.