Ignore:
Timestamp:
Dec 22, 2009, 12:07:26 PM (14 years ago)
Author:
lguez
Message:

1) Replaced calls to "float" by calls to "real" and "dble" in
"phys_cosp". "call construct_cosp_gridbox(float(itap),..." was a bug
since the corresponding dummy argument has the type "double
precision". (And "float" is not in the Fortran standard.)

2) Modifications for the program "create_etat0_limit" only, "gcm" is
not touched:

2.1) Removed generic interface "startget" in module "startvar". Replaced
calls to "startget" by calls to "startget_phys2d", "startget_dyn" and
"startget_phys1d".

2.2) Simplified the interface of "startget_dyn" and made it more secure by
removing arguments for sizes of arrays and using assumed-shape array
arguments.

2.3) Corrected bug in call to "startget_dyn" for northward velocity. See
ticket #25 in Trac.

2.4) Collected procedures "inter_barxy", "inter_barx", "inter_bary",
"ord_coord" and "ord_coordm" in a module. "inter_barxy" is the only
public procedure in the module. Rewrote those five procedures: removed
arguments for sizes of arrays; used assumed-shape array arguments;
used array expressions; translated some spaghetti code in "inter_bary"
into structured code; corrected bug in "inter_bary", described by
ticket #26 in Trac.

2.5) Corrected a bug in "inter_bary": "y0" was initialized at 0
instead of -90. This bug made values at the south pole wrong. (This bug
has been acknowledeged by P. Le Van.)

2.6) Made the variable "champ" in procedure "limit_netcdf" an array of
rank 2. Thus it can be an argument in the call to the newly-secured
"inter_barxy".

2.7) The files "start.nc", "startphy.nc" and "limit.nc" are impacted
by this revision. There is a significant change in the variable "vcov"
of "start.nc". See
http://web.lmd.jussieu.fr/~lglmd/Rev_1293/index.html. Note also the
changed value of "vcov" at the south pole. There is very little change
in other variables, in all three files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar/limit_netcdf.F

    r1279 r1293  
    99      USE dimphy
    1010      use phys_state_var_mod , ONLY : pctsrf
     11      use inter_barxy_m, only: inter_barxy
     12
    1113      IMPLICIT none
    1214c
     
    7072      REAL , ALLOCATABLE :: dlon(:), dlat(:)
    7173      REAL , ALLOCATABLE :: dlon_ini(:), dlat_ini(:)
    72       REAL , ALLOCATABLE :: champ_msk(:), champ(:)
     74      REAL , ALLOCATABLE :: champ_msk(:), champ(:, :)
    7375      REAL , ALLOCATABLE :: work(:,:)
    7476
     
    335337      ENDIF
    336338c
    337       ALLOCATE( champ(imdep*jmdep) )
     339      ALLOCATE( champ(imdep, jmdep) )
    338340
    339341      DO  200 l = 1, lmdep
     
    364366
    365367       IF ( interbar )   THEN
    366          DO j = 1, imdep * jmdep
    367            champ(j) = LOG(champ(j))
    368          ENDDO
    369 
    370368        IF( l.EQ.1 )  THEN
    371369         WRITE(6,*) '-------------------------------------------------',
     
    376374     ,'------------------------'
    377375        ENDIF
    378         CALL inter_barxy ( imdep,jmdep -1,dlon,dlat,champ ,
    379      ,                  iim,jjm,rlonu,rlatv, jjp1,champint )
     376        CALL inter_barxy(dlon, dlat(:jmdep -1), log(champ), rlonu(:iim),
     377     $       rlatv, champint)
    380378         DO j=1,jjp1
    381379          DO i=1,iim
     
    556554      ENDIF
    557555c
    558       ALLOCATE ( champ(imdep*jmdep) )
     556      ALLOCATE ( champ(imdep, jmdep) )
    559557
    560558      DO l = 1, lmdep
     
    604602cIM   ENDDO
    605603cIM22/02/2002
    606          CALL inter_barxy ( imdep,jmdep -1,dlon, dlat ,
    607      ,     champ, iim, jjm, rlonu, rlatv, jjp1, champint )
     604       CALL inter_barxy (dlon, dlat(:jmdep -1), champ, rlonu(:iim),
     605     $      rlatv, champint)
    608606      ELSE
    609607         CALL sea_ice(imdep, jmdep, dlon, dlat, champ,
     
    881879      ENDIF
    882880
    883        ALLOCATE( champ(imdep*jmdep) )
     881       ALLOCATE( champ(imdep, jmdep) )
    884882       IF( extrap )   THEN
    885883         ALLOCATE ( work(imdep,jmdep) )
     
    924922     ,'------------------------'
    925923        ENDIF
    926        CALL inter_barxy ( imdep,jmdep -1,dlon, dlat ,
    927      , champ, iim, jjm, rlonu, rlatv, jjp1, champint )
     924        CALL inter_barxy (dlon, dlat(:jmdep -1), champ, rlonu(:iim),
     925     $       rlatv, champint)
    928926      ELSE
    929927       CALL grille_m(imdep, jmdep, dlon, dlat, champ,
     
    10821080      ENDIF
    10831081c
    1084       ALLOCATE ( champ(imdep*jmdep) )
     1082      ALLOCATE ( champ(imdep, jmdep) )
    10851083
    10861084      DO l = 1, lmdep
     
    11201118        ENDIF
    11211119
    1122        CALL inter_barxy ( imdep,jmdep -1,dlon, dlat ,
    1123      , champ, iim, jjm, rlonu, rlatv, jjp1, champint )
     1120       CALL inter_barxy(dlon, dlat(:jmdep-1), champ, rlonu(:iim),
     1121     $       rlatv, champint)
    11241122      ELSE
    11251123       CALL grille_m(imdep, jmdep, dlon, dlat, champ,
Note: See TracChangeset for help on using the changeset viewer.