--- trunk/libf/dyn3d/grid_change.f90 2008/07/28 14:48:09 14 +++ trunk/libf/dyn3d/grid_change.f90 2008/08/01 15:24:12 15 @@ -57,7 +57,7 @@ !******************************************** - function gr_phy_write(pfi) + function gr_phy_write_2d(pfi) ! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28 ! Transforme une variable de la grille physique à la grille d'écriture. @@ -67,21 +67,50 @@ use dimphy, only: klon REAL, intent(in):: pfi(:) - real gr_phy_write(iim, jjm + 1) + real gr_phy_write_2d(iim, jjm + 1) ! Variable local to the procedure: real field(iim, jjm + 1) !----------------------------------------------------------------------- - if (size(pfi) /= klon) stop "gr_phy_write" + if (size(pfi) /= klon) stop "gr_phy_write_2d" ! Traitement des pôles : field(2:, 1) = pfi(1) field(2:, jjm + 1) = pfi(klon) - gr_phy_write = unpack(pfi, dyn_phy(:iim, :), field) + gr_phy_write_2d = unpack(pfi, dyn_phy(:iim, :), field) - END function gr_phy_write + END function gr_phy_write_2d + + !*************************************************** + + function gr_phy_write_3d(pfi) + + ! Transforme une variable dépendant de la position verticale de la + ! grille physique à la grille d'écriture. + ! The grid for output files does not duplicate the first longitude + ! in the last longitude. + + use dimphy, only: klon + use dimens_m, only: llm + use numer_rec, only: assert + + REAL, intent(in):: pfi(:, :) + real gr_phy_write_3d(iim, jjm + 1, llm) + + ! Variable local to the procedure: + integer l + + !----------------------------------------------------------------------- + + call assert(shape(pfi) == (/klon, llm/), "gr_phy_write_3d") + + do l = 1, llm + gr_phy_write_3d(:, :, l) = gr_phy_write_2d(pfi(:, l)) + end do + + END function gr_phy_write_3d end module grid_change