--- trunk/dyn3d/leapfrog.f 2014/03/12 21:16:36 90 +++ trunk/dyn3d/leapfrog.f 2014/07/15 13:43:24 102 @@ -53,7 +53,7 @@ REAL, intent(in):: time_0 - ! Variables local to the procedure: + ! Local: ! Variables dynamiques: @@ -61,11 +61,11 @@ REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches REAL pkf(iim + 1, jjm + 1, llm) ! exner filtr\'e au milieu des couches REAL phi(iim + 1, jjm + 1, llm) ! geopotential - REAL w((iim + 1) * (jjm + 1), llm) ! vitesse verticale + REAL w(iim + 1, jjm + 1, llm) ! vitesse verticale ! Variables dynamiques intermediaire pour le transport ! Flux de masse : - REAL pbaru((iim + 1) * (jjm + 1), llm), pbarv((iim + 1) * jjm, llm) + REAL pbaru(iim + 1, jjm + 1, llm), pbarv(iim + 1, jjm, llm) ! Variables dynamiques au pas - 1 REAL vcovm1(iim + 1, jjm, llm), ucovm1(iim + 1, jjm + 1, llm) @@ -82,9 +82,8 @@ REAL dtetadis(iim + 1, jjm + 1, llm) ! Tendances physiques - REAL dvfi((iim + 1) * jjm, llm), dufi((iim + 1) * (jjm + 1), llm) - REAL dtetafi(iim + 1, jjm + 1, llm), dqfi((iim + 1) * (jjm + 1), llm, nqmx) - real dpfi((iim + 1) * (jjm + 1)) + REAL dvfi(iim + 1, jjm, llm), dufi(iim + 1, jjm + 1, llm) + REAL dtetafi(iim + 1, jjm + 1, llm), dqfi(iim + 1, jjm + 1, llm, nqmx) ! Variables pour le fichier histoire @@ -100,7 +99,7 @@ REAL vcont((iim + 1) * jjm, llm), ucont((iim + 1) * (jjm + 1), llm) logical leapf - real dt + real dt ! time step, in s !--------------------------------------------------- @@ -121,8 +120,8 @@ else ! Matsuno dt = dtvr - if (ok_guide .and. (itaufin - itau - 1) * dtvr > 21600.) & - call guide(itau, ucov, vcov, teta, q, masse, ps) + if (ok_guide .and. itaufin - itau - 1 > day_step / 4) & + call guide(itau, ucov, vcov, teta, q, ps) vcovm1 = vcov ucovm1 = ucov tetam1 = teta @@ -149,11 +148,11 @@ dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, & leapf) + forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps + CALL exner_hyb(ps, p3d, pks, pk, pkf) + if (.not. leapf) then ! Matsuno backward - forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps - CALL exner_hyb(ps, p3d, pks, pk, pkf) - ! Calcul des tendances dynamiques: CALL geopot(teta, pk, pks, phis, phi) CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, & @@ -164,29 +163,26 @@ CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, & dteta, dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, & finvmaold, dtvr, leapf=.false.) + + forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps + CALL exner_hyb(ps, p3d, pks, pk, pkf) end if IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN ! Calcul des tendances physiques: - forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps - CALL exner_hyb(ps, p3d, pks, pk, pkf) - rdaym_ini = itau * dtvr / daysec rdayvrai = rdaym_ini + day_ini time = REAL(mod(itau, day_step)) / day_step + time_0 IF (time > 1.) time = time - 1. - CALL calfis(rdayvrai, time, ucov, vcov, teta, q, ps, pk, phis, phi, & - w, dufi, dvfi, dtetafi, dqfi, dpfi, lafin = itau + 1 == itaufin) + CALL calfis(rdayvrai, time, ucov, vcov, teta, q, pk, phis, phi, w, & + dufi, dvfi, dtetafi, dqfi, lafin = itau + 1 == itaufin) ! Ajout des tendances physiques: - CALL addfi(ucov, vcov, teta, q, ps, dufi, dvfi, dtetafi, dqfi, dpfi) + CALL addfi(ucov, vcov, teta, q, dufi, dvfi, dtetafi, dqfi) ENDIF - forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps - CALL exner_hyb(ps, p3d, pks, pk, pkf) - IF (MOD(itau + 1, idissip) == 0) THEN ! Dissipation horizontale et verticale des petites \'echelles