--- trunk/libf/dyn3d/advtrac.f90 2011/04/13 12:29:18 44 +++ trunk/dyn3d/advtrac.f 2014/09/04 10:05:52 104 @@ -9,22 +9,21 @@ ! From dyn3d/advtrac.F, version 1.4 2005/04/13 08:58:34 ! Author: F. Hourdin - USE dimens_m, ONLY : iim, jjm, llm, nqmx - USE paramet_m, ONLY : iip1, iip2, ijmllm, ijp1llm, ip1jm, ip1jmp1, jjp1, & - llmp1 USE comconst, ONLY : dtvr USE conf_gcm_m, ONLY : iapp_tracvl + USE dimens_m, ONLY : iim, jjm, llm, nqmx USE iniadvtrac_m, ONLY : iadv + use massbar_m, only: massbar + USE paramet_m, ONLY : iip1, iip2, ijmllm, ijp1llm, ip1jm, ip1jmp1, jjp1, & + llmp1 - ! Arguments - - INTEGER iapptrac - REAL pbaru(ip1jmp1, llm), pbarv(ip1jm, llm) - REAL, intent(inout):: q(ip1jmp1, llm, nqmx) - real masse(ip1jmp1, llm) + REAL, intent(in):: pbaru(ip1jmp1, llm), pbarv(ip1jm, llm) REAL, intent(in):: p(ip1jmp1, llmp1) + real, intent(in):: masse(ip1jmp1, llm) + REAL, intent(inout):: q(ip1jmp1, llm, nqmx) + INTEGER, intent(out):: iapptrac real, intent(in):: teta(ip1jmp1, llm) - REAL pk(ip1jmp1, llm) + REAL, intent(in):: pk(ip1jmp1, llm) ! Variables locales @@ -33,7 +32,6 @@ REAL, save:: massem(ip1jmp1, llm) real zdp(ip1jmp1) REAL pbarug(ip1jmp1, llm), pbarvg(ip1jm, llm), wg(ip1jmp1, llm) - REAL cpuadv(nqmx) INTEGER:: iadvtr = 0 INTEGER ij, l, iq @@ -72,15 +70,13 @@ END DO ! selection de la masse instantannee des mailles avant le transport. - IF (iadvtr==0) THEN - CALL scopy(ip1jmp1*llm, masse, 1, massem, 1) - END IF + IF (iadvtr==0) massem = masse iadvtr = iadvtr + 1 iapptrac = iadvtr ! Test pour savoir si on advecte a ce pas de temps - IF (iadvtr==iapp_tracvl) THEN + IF (iadvtr == iapp_tracvl) THEN ! traitement des flux de masse avant advection. ! 1. calcul de w ! 2. groupement des mailles pres du pole. @@ -127,7 +123,7 @@ ! Schema de Frederic Hourdin ELSE IF (iadv(iq)==12) THEN ! Pas de temps adaptatif - CALL adaptdt(iadv(iq), dtbon, n, pbarug, massem) + CALL adaptdt(dtbon, n, pbarug, massem) IF (n>1) THEN WRITE (*, *) 'WARNING horizontal dt=', dtbon, 'dtvr=', dtvr, & 'n=', n @@ -137,7 +133,7 @@ END DO ELSE IF (iadv(iq)==13) THEN ! Pas de temps adaptatif - CALL adaptdt(iadv(iq), dtbon, n, pbarug, massem) + CALL adaptdt(dtbon, n, pbarug, massem) IF (n>1) THEN WRITE (*, *) 'WARNING horizontal dt=', dtbon, 'dtvr=', dtvr, & 'n=', n @@ -151,7 +147,7 @@ ! Schema de Prather ELSE IF (iadv(iq)==30) THEN ! Pas de temps adaptatif - CALL adaptdt(iadv(iq), dtbon, n, pbarug, massem) + CALL adaptdt(dtbon, n, pbarug, massem) IF (n>1) THEN WRITE (*, *) 'WARNING horizontal dt=', dtbon, 'dtvr=', dtvr, & 'n=', n @@ -161,7 +157,7 @@ ELSE IF (iadv(iq)==11 .OR. (iadv(iq)>=16 .AND. iadv(iq)<=18)) THEN ! Test sur le flux horizontal ! Pas de temps adaptatif - CALL adaptdt(iadv(iq), dtbon, n, pbarug, massem) + CALL adaptdt(dtbon, n, pbarug, massem) IF (n>1) THEN WRITE (*, *) 'WARNING horizontal dt=', dtbon, 'dtvr=', dtvr, & 'n=', n