Ignore:
Timestamp:
Aug 21, 2015, 5:13:46 PM (9 years ago)
Author:
Ehouarn Millour
Message:

Physics/dynamics separation:

  • remove all references to dimensions.h from physics. nbp_lon (==iim) , nbp_lat (==jjm+1) and nbp_lev (==llm) from mod_grid_phy_lmdz should be used instead.
  • added module regular_lonlat_mod in phy_common to store information about the global (lon-lat) grid cell boundaries and centers.

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/aaam_bud.F90

    r2311 r2346  
    66
    77  USE dimphy
     8  USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
    89  IMPLICIT NONE
    910  ! ======================================================================
     
    5859  ! ===================
    5960
    60   ! iim--common-I: Number of longitude intervals
    61   ! jjm--common-I: Number of latitude intervals
     61  ! nbp_lon--common-I: Number of longitude intervals
     62  ! (nbp_lat-1)--common-I: Number of latitude intervals
    6263  ! klon-common-I: Number of points seen by the physics
    63   ! iim*(jjm-1)+2 for instance
     64  ! nbp_lon*(nbp_lat-2)+2 for instance
    6465  ! klev-common-I: Number of vertical layers
    6566  ! ======================================================================
     
    8485  ! ======================================================================
    8586
    86   include "dimensions.h"
    87   ! cc#include "dimphy.h"
    88 
    8987  ! ARGUMENTS
    9088
     
    121119  ! PUT AAM QUANTITIES AT ZERO:
    122120
    123   IF (iim+1>801 .OR. jjm+1>401) THEN
     121  IF (nbp_lon+1>801 .OR. nbp_lat>401) THEN
    124122    abort_message = 'Pb de dimension dans aaam_bud'
    125123    CALL abort_physic(modname, abort_message, 1)
     
    129127  hadley = 1.E18
    130128  hadday = 1.E18*24.*3600.
    131   dlat = xpi/real(jjm)
    132   dlon = 2.*xpi/real(iim)
     129  dlat = xpi/real(nbp_lat-1)
     130  dlon = 2.*xpi/real(nbp_lon)
    133131
    134132  DO iax = 1, 3
     
    155153  zlat(1) = plat(l)*xpi/180.
    156154
    157   DO i = 1, iim + 1
     155  DO i = 1, nbp_lon + 1
    158156
    159157    zs(i, 1) = phis(l)/rg
     
    169167
    170168
    171   DO j = 2, jjm
     169  DO j = 2, nbp_lat-1
    172170
    173171    ! Values at Greenwich (Periodicity)
    174172
    175     zs(iim+1, j) = phis(l+1)/rg
    176     ps(iim+1, j) = p(l+1, 1)
    177     ssou(iim+1, j) = dragu(l+1) + liftu(l+1)
    178     ssov(iim+1, j) = dragv(l+1) + liftv(l+1)
    179     blsu(iim+1, j) = phyu(l+1) - dragu(l+1) - liftu(l+1)
    180     blsv(iim+1, j) = phyv(l+1) - dragv(l+1) - liftv(l+1)
    181     zlon(iim+1) = -plon(l+1)*xpi/180.
     173    zs(nbp_lon+1, j) = phis(l+1)/rg
     174    ps(nbp_lon+1, j) = p(l+1, 1)
     175    ssou(nbp_lon+1, j) = dragu(l+1) + liftu(l+1)
     176    ssov(nbp_lon+1, j) = dragv(l+1) + liftv(l+1)
     177    blsu(nbp_lon+1, j) = phyu(l+1) - dragu(l+1) - liftu(l+1)
     178    blsv(nbp_lon+1, j) = phyv(l+1) - dragv(l+1) - liftv(l+1)
     179    zlon(nbp_lon+1) = -plon(l+1)*xpi/180.
    182180    zlat(j) = plat(l+1)*xpi/180.
    183181
    184     ub(iim+1, j) = 0.
    185     vb(iim+1, j) = 0.
     182    ub(nbp_lon+1, j) = 0.
     183    vb(nbp_lon+1, j) = 0.
    186184    DO k = 1, nlev
    187       ub(iim+1, j) = ub(iim+1, j) + u(l+1, k)*(p(l+1,k)-p(l+1,k+1))/rg
    188       vb(iim+1, j) = vb(iim+1, j) + v(l+1, k)*(p(l+1,k)-p(l+1,k+1))/rg
    189     END DO
    190 
    191 
    192     DO i = 1, iim
     185      ub(nbp_lon+1, j) = ub(nbp_lon+1, j) + u(l+1, k)*(p(l+1,k)-p(l+1,k+1))/rg
     186      vb(nbp_lon+1, j) = vb(nbp_lon+1, j) + v(l+1, k)*(p(l+1,k)-p(l+1,k+1))/rg
     187    END DO
     188
     189
     190    DO i = 1, nbp_lon
    193191
    194192      l = l + 1
     
    215213  ! South Pole
    216214
    217   IF (jjm>1) THEN
     215  IF (nbp_lat-1>1) THEN
    218216    l = l + 1
    219     ub(1, jjm+1) = 0.
    220     vb(1, jjm+1) = 0.
     217    ub(1, nbp_lat) = 0.
     218    vb(1, nbp_lat) = 0.
    221219    DO k = 1, nlev
    222       ub(1, jjm+1) = ub(1, jjm+1) + u(l, k)*(p(l,k)-p(l,k+1))/rg
    223       vb(1, jjm+1) = vb(1, jjm+1) + v(l, k)*(p(l,k)-p(l,k+1))/rg
    224     END DO
    225     zlat(jjm+1) = plat(l)*xpi/180.
    226 
    227     DO i = 1, iim + 1
    228       zs(i, jjm+1) = phis(l)/rg
    229       ps(i, jjm+1) = p(l, 1)
    230       ssou(i, jjm+1) = dragu(l) + liftu(l)
    231       ssov(i, jjm+1) = dragv(l) + liftv(l)
    232       blsu(i, jjm+1) = phyu(l) - dragu(l) - liftu(l)
    233       blsv(i, jjm+1) = phyv(l) - dragv(l) - liftv(l)
    234       ub(i, jjm+1) = ub(1, jjm+1)
    235       vb(i, jjm+1) = vb(1, jjm+1)
     220      ub(1, nbp_lat) = ub(1, nbp_lat) + u(l, k)*(p(l,k)-p(l,k+1))/rg
     221      vb(1, nbp_lat) = vb(1, nbp_lat) + v(l, k)*(p(l,k)-p(l,k+1))/rg
     222    END DO
     223    zlat(nbp_lat) = plat(l)*xpi/180.
     224
     225    DO i = 1, nbp_lon + 1
     226      zs(i, nbp_lat) = phis(l)/rg
     227      ps(i, nbp_lat) = p(l, 1)
     228      ssou(i, nbp_lat) = dragu(l) + liftu(l)
     229      ssov(i, nbp_lat) = dragv(l) + liftv(l)
     230      blsu(i, nbp_lat) = phyu(l) - dragu(l) - liftu(l)
     231      blsv(i, nbp_lat) = phyv(l) - dragv(l) - liftv(l)
     232      ub(i, nbp_lat) = ub(1, nbp_lat)
     233      vb(i, nbp_lat) = vb(1, nbp_lat)
    236234    END DO
    237235  END IF
     
    240238  ! MOMENT ANGULAIRE
    241239
    242   DO j = 1, jjm
    243     DO i = 1, iim
     240  DO j = 1, nbp_lat-1
     241    DO i = 1, nbp_lon
    244242
    245243      raam(1) = raam(1) - rea**3*dlon*dlat*0.5*(cos(zlon(i))*sin(zlat(j))*cos &
     
    274272
    275273
    276   DO j = 1, jjm
    277     DO i = 1, iim
     274  DO j = 1, nbp_lat-1
     275    DO i = 1, nbp_lon
    278276      tmou(1) = tmou(1) - rea**2*dlon*0.5*sin(zlon(i))*(zs(i,j)-zs(i,j+1))*( &
    279277        cos(zlat(j+1))*ps(i,j+1)+cos(zlat(j))*ps(i,j))
     
    283281  END DO
    284282
    285   DO j = 2, jjm
    286     DO i = 1, iim
     283  DO j = 2, nbp_lat-1
     284    DO i = 1, nbp_lon
    287285      tmou(1) = tmou(1) + rea**2*dlat*0.5*sin(zlat(j))*(zs(i+1,j)-zs(i,j))*( &
    288286        cos(zlon(i+1))*ps(i+1,j)+cos(zlon(i))*ps(i,j))
     
    298296
    299297  l = 1
    300   DO j = 2, jjm
    301     DO i = 1, iim
     298  DO j = 2, nbp_lat-1
     299    DO i = 1, nbp_lon
    302300      l = l + 1
    303301      tsso(1) = tsso(1) - rea**3*cos(zlat(j))*dlon*dlat*ssou(i, j)*sin(zlat(j &
     
    341339100 FORMAT (F12.5, 15(1X,F12.5))
    342340
    343   ! write(iam+1,*)((zs(i,j),i=1,iim),j=1,jjm+1)
    344   ! write(iam+1,*)((ps(i,j),i=1,iim),j=1,jjm+1)
    345   ! write(iam+1,*)((ub(i,j),i=1,iim),j=1,jjm+1)
    346   ! write(iam+1,*)((vb(i,j),i=1,iim),j=1,jjm+1)
    347   ! write(iam+1,*)((ssou(i,j),i=1,iim),j=1,jjm+1)
    348   ! write(iam+1,*)((ssov(i,j),i=1,iim),j=1,jjm+1)
    349   ! write(iam+1,*)((blsu(i,j),i=1,iim),j=1,jjm+1)
    350   ! write(iam+1,*)((blsv(i,j),i=1,iim),j=1,jjm+1)
     341  ! write(iam+1,*)((zs(i,j),i=1,nbp_lon),j=1,nbp_lat)
     342  ! write(iam+1,*)((ps(i,j),i=1,nbp_lon),j=1,nbp_lat)
     343  ! write(iam+1,*)((ub(i,j),i=1,nbp_lon),j=1,nbp_lat)
     344  ! write(iam+1,*)((vb(i,j),i=1,nbp_lon),j=1,nbp_lat)
     345  ! write(iam+1,*)((ssou(i,j),i=1,nbp_lon),j=1,nbp_lat)
     346  ! write(iam+1,*)((ssov(i,j),i=1,nbp_lon),j=1,nbp_lat)
     347  ! write(iam+1,*)((blsu(i,j),i=1,nbp_lon),j=1,nbp_lat)
     348  ! write(iam+1,*)((blsv(i,j),i=1,nbp_lon),j=1,nbp_lat)
    351349
    352350  aam = raam(3)
Note: See TracChangeset for help on using the changeset viewer.