--- trunk/libf/dyn3d/leapfrog.f90 2012/01/10 19:02:02 56 +++ trunk/libf/dyn3d/leapfrog.f90 2012/10/02 15:50:56 67 @@ -6,7 +6,7 @@ SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0) - ! From dyn3d/leapfrog.F, version 1.6, 2005/04/13 08:58:34 + ! From dyn3d/leapfrog.F, version 1.6, 2005/04/13 08:58:34 revision 616 ! Authors: P. Le Van, L. Fairhead, F. Hourdin ! Matsuno-leapfrog scheme. @@ -17,8 +17,9 @@ USE calfis_m, ONLY: calfis USE comconst, ONLY: daysec, dtphys, dtvr USE comgeom, ONLY: aire_2d, apoln, apols - USE comvert, ONLY: ap, bp - USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, offline + USE disvert_m, ONLY: ap, bp + USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, offline, & + iflag_phys, ok_guide USE dimens_m, ONLY: iim, jjm, llm, nqmx use dissip_m, only: dissip USE dynetat0_m, ONLY: day_ini @@ -29,7 +30,6 @@ USE guide_m, ONLY: guide use inidissip_m, only: idissip use integrd_m, only: integrd - USE logic, ONLY: iflag_phys, ok_guide use nr_util, only: assert USE pressure_var, ONLY: p3d USE temps, ONLY: itau_dyn @@ -43,8 +43,8 @@ ! potential temperature REAL, intent(inout):: ps(:, :) ! (iim + 1, jjm + 1) pression au sol, en Pa - REAL masse((iim + 1) * (jjm + 1), llm) ! masse d'air - REAL phis((iim + 1) * (jjm + 1)) ! geopotentiel au sol + REAL masse(:, :, :) ! (iim + 1, jjm + 1, llm) masse d'air + REAL phis(:, :) ! (iim + 1, jjm + 1) geopotentiel au sol REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) ! mass fractions of advected fields @@ -57,7 +57,7 @@ REAL pks((iim + 1) * (jjm + 1)) ! exner au sol REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches - REAL pkf((iim + 1) * (jjm + 1), llm) ! exner filt.au milieu des couches + REAL pkf(iim + 1, jjm + 1, llm) ! exner filtré au milieu des couches REAL phi(iim + 1, jjm + 1, llm) ! geopotential REAL w((iim + 1) * (jjm + 1), llm) ! vitesse verticale @@ -68,7 +68,7 @@ ! Variables dynamiques au pas - 1 REAL vcovm1(iim + 1, jjm, llm), ucovm1(iim + 1, jjm + 1, llm) REAL tetam1(iim + 1, jjm + 1, llm), psm1(iim + 1, jjm + 1) - REAL massem1((iim + 1) * (jjm + 1), llm) + REAL massem1(iim + 1, jjm + 1, llm) ! Tendances dynamiques REAL dv((iim + 1) * jjm, llm), dudyn((iim + 1) * (jjm + 1), llm) @@ -89,7 +89,7 @@ INTEGER itau ! index of the time step of the dynamics, starts at 0 INTEGER itaufin REAL time ! time of day, as a fraction of day length - real finvmaold((iim + 1) * (jjm + 1), llm) + real finvmaold(iim + 1, jjm + 1, llm) INTEGER l REAL rdayvrai, rdaym_ini @@ -106,7 +106,7 @@ call assert(shape(ucov) == (/iim + 1, jjm + 1, llm/), "leapfrog") itaufin = nday * day_step - ! "day_step" is a multiple of "iperiod", therefore "itaufin" is one too + ! "day_step" is a multiple of "iperiod", therefore so is "itaufin". dq = 0. @@ -129,7 +129,7 @@ massem1 = masse psm1 = ps finvmaold = masse - CALL filtreg(finvmaold, jjm + 1, llm, - 2, 2, .TRUE., 1) + CALL filtreg(finvmaold, jjm + 1, llm, - 2, 2, .TRUE.) end if ! Calcul des tendances dynamiques: @@ -180,7 +180,7 @@ CALL calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, & phis, phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, & - lafin=itau+1==itaufin) + lafin = itau + 1 == itaufin) ! ajout des tendances physiques: CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, & @@ -224,21 +224,21 @@ IF (MOD(itau + 1, iperiod) == 0) THEN ! Écriture du fichier histoire moyenne: - CALL writedynav(nqmx, itau + 1, vcov, ucov, teta, pk, phi, q, & - masse, ps, phis) + CALL writedynav(vcov, ucov, teta, pk, phi, q, masse, ps, phis, & + time = itau + 1) call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, & - q(:, :, :, 1), dt_app = dtvr * iperiod) + q(:, :, :, 1)) ENDIF end do time_integration CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, & - itau=itau_dyn+itaufin) + itau = itau_dyn + itaufin) ! Calcul des tendances dynamiques: CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi) CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, & dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, & - conser=MOD(itaufin, iconser)==0) + conser = MOD(itaufin, iconser) == 0) END SUBROUTINE leapfrog