--- trunk/Sources/dyn3d/leapfrog.f 2018/01/22 15:02:56 252 +++ trunk/dyn3d/leapfrog.f 2018/04/19 17:54:55 266 @@ -9,7 +9,7 @@ ! From dyn3d/leapfrog.F, version 1.6, 2005/04/13 08:58:34 revision 616 ! Authors: P. Le Van, L. Fairhead, F. Hourdin - ! Intégration temporelle du modèle : Matsuno-leapfrog scheme. + ! Int\'egration temporelle du mod\`ele : Matsuno-leapfrog scheme. use addfi_m, only: addfi use bilan_dyn_m, only: bilan_dyn @@ -20,10 +20,9 @@ USE comgeom, ONLY: aire_2d, apoln, apols use covcont_m, only: covcont USE disvert_m, ONLY: ap, bp - USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, & - iflag_phys, iecri + USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, iflag_phys USE conf_guide_m, ONLY: ok_guide - USE dimens_m, ONLY: iim, jjm, llm, nqmx + USE dimensions, ONLY: iim, jjm, llm, nqmx use dissip_m, only: dissip USE dynetat0_m, ONLY: day_ini use dynredem1_m, only: dynredem1 @@ -36,7 +35,6 @@ use integrd_m, only: integrd use nr_util, only: assert USE temps, ONLY: itau_dyn - use writedynav_m, only: writedynav use writehist_m, only: writehist ! Variables dynamiques: @@ -63,7 +61,7 @@ REAL phi(iim + 1, jjm + 1, llm) ! geopotential REAL w(iim + 1, jjm + 1, llm) ! vitesse verticale - ! Variables dynamiques intermediaire pour le transport + ! Variables dynamiques interm\'ediaires pour le transport ! Flux de masse : REAL pbaru(iim + 1, jjm + 1, llm), pbarv(iim + 1, jjm, llm) @@ -73,7 +71,7 @@ REAL massem1(iim + 1, jjm + 1, llm) ! Tendances dynamiques - REAL dv((iim + 1) * jjm, llm), dudyn(iim + 1, jjm + 1, llm) + REAL dv((iim + 1) * jjm, llm), du(iim + 1, jjm + 1, llm) REAL dteta(iim + 1, jjm + 1, llm) real dp(iim + 1, jjm + 1) @@ -117,6 +115,7 @@ time_integration: do itau = 0, itaufin - 1 leapf = mod(itau, iperiod) /= 0 + if (leapf) then dt = 2 * dtvr else @@ -132,15 +131,14 @@ ! Calcul des tendances dynamiques: CALL geopot(teta, pk, pks, phis, phi) - CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, & - dudyn, dv, dteta, dp, w, pbaru, pbarv, & - conser = MOD(itau, iconser) == 0) + CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, du, & + dv, dteta, dp, w, pbaru, pbarv, conser = MOD(itau, iconser) == 0) CALL caladvtrac(q, pbaru, pbarv, p3d, masse, teta, pk) ! Int\'egrations dynamique et traceurs: - CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, dteta, & - dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, dt, leapf) + CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, dp, & + vcov, ucov, teta, q(:, :, :, :2), ps, masse, dt, leapf) forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps CALL exner_hyb(ps, p3d, pks, pk) @@ -152,11 +150,11 @@ ! Calcul des tendances dynamiques: CALL geopot(teta, pk, pks, phis, phi) CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, & - phi, dudyn, dv, dteta, dp, w, pbaru, pbarv, conser = .false.) + phi, du, dv, dteta, dp, w, pbaru, pbarv, conser = .false.) ! integrations dynamique et traceurs: - CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, & - dteta, dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, dtvr, & + CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, & + dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, dtvr, & leapf=.false.) forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps @@ -195,34 +193,28 @@ ! Calcul de la valeur moyenne aux p\^oles : forall (l = 1: llm) - teta(:, 1, l) = SUM(aire_2d(:iim, 1) * teta(:iim, 1, l)) & - / apoln + teta(:, 1, l) = SUM(aire_2d(:iim, 1) * teta(:iim, 1, l)) / apoln teta(:, jjm + 1, l) = SUM(aire_2d(:iim, jjm + 1) & * teta(:iim, jjm + 1, l)) / apols END forall END IF IF (MOD(itau + 1, iperiod) == 0) THEN - ! \'Ecriture du fichier histoire moyenne: - 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)) ENDIF - IF (MOD(itau + 1, iecri * day_step) == 0) THEN - CALL geopot(teta, pk, pks, phis, phi) - CALL writehist(itau, vcov, ucov, teta, phi, masse, ps) - END IF + CALL geopot(teta, pk, pks, phis, phi) + CALL writehist(vcov, ucov, teta, pk, phi, q, masse, ps, & + itau_w = itau_dyn + itau + 1) end do time_integration CALL dynredem1(vcov, ucov, teta, q, masse, ps, itau = itau_dyn + itaufin) ! Calcul des tendances dynamiques: CALL geopot(teta, pk, pks, phis, phi) - CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, & - dudyn, dv, dteta, dp, w, pbaru, pbarv, & - conser = MOD(itaufin, iconser) == 0) + CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, du, & + dv, dteta, dp, w, pbaru, pbarv, conser = MOD(itaufin, iconser) == 0) END SUBROUTINE leapfrog