source: LMDZ6/trunk/libf/phylmd/geo2atm.f90 @ 5274

Last change on this file since 5274 was 5274, checked in by abarral, 31 hours ago

Replace yomcst.h by existing module

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 3.0 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/geo2atm.F90,v 1.1 2008-12-05 17:56:40 lsce Exp $
3!
4SUBROUTINE geo2atm(im, jm, px, py, pz, plon, plat, pu, pv, pr)
5  USE dimphy
6  USE mod_phys_lmdz_para
7  USE mod_grid_phy_lmdz, only: grid_type, unstructured, regular_lonlat
8  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
9          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
10          , R_ecc, R_peri, R_incl                                      &
11          , RA, RG, R1SA                                         &
12          , RSIGMA                                                     &
13          , R, RMD, RMV, RD, RV, RCPD                    &
14          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
15          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
16          , RCW, RCS                                                 &
17          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
18          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
19          , RALPD, RBETD, RGAMD
20IMPLICIT NONE
21
22  CHARACTER (len = 6)                :: clmodnam
23  CHARACTER (len = 20)               :: modname = 'geo2atm'
24  CHARACTER (len = 80)               :: abort_message
25
26! Change wind coordinates from cartesian geocentric to local spherical
27! NB! Fonctionne probablement uniquement en MPI seul (sans OpenMP)
28!
29! Geocentric :
30  ! axe x is eastward : crosses (0N,90E) point.
31  ! axe y  crosses (0N,180E) point.
32  ! axe z is 'up' : crosses north pole.
33!
34! NB! Aux poles, fonctionne probablement uniquement en MPI seul (sans OpenMP)
35
36  INTEGER, INTENT (IN)                 :: im, jm
37  REAL, DIMENSION (im,jm), INTENT(IN)  :: px, py, pz
38  REAL, DIMENSION (im,jm), INTENT(IN)  :: plon, plat
39  REAL, DIMENSION (im,jm), INTENT(OUT) :: pu, pv, pr
40
41  REAL :: rad,reps
42
43
44  rad = rpi / 180.0E0
45  reps = 1.0e-5
46
47  pu(:,:) = &
48       - px(:,:) * SIN(rad * plon(:,:)) &
49       + py(:,:) * COS(rad * plon(:,:))
50
51  pv(:,:) = &
52       - px(:,:) * SIN(rad * plat(:,:)) * COS(rad * plon(:,:)) &
53       - py(:,:) * SIN(rad * plat(:,:)) * SIN(rad * plon(:,:)) &
54       + pz(:,:) * COS(rad * plat(:,:)) 
55
56  pr(:,:) = &
57       + px(:,:) * COS(rad * plat(:,:)) * COS(rad * plon(:,:)) &
58       + py(:,:) * COS(rad * plat(:,:)) * SIN(rad * plon(:,:)) &
59       + pz(:,:) * SIN(rad * plat(:,:))
60
61  IF (grid_type==regular_lonlat) THEN
62    ! Value at North Pole
63    IF (is_north_pole_dyn) THEN
64       pu(:, 1) = -px (1,1)
65       pv(:, 1) = -py (1,1)
66       pr(:, 1) = 0.0
67    ENDIF
68 
69    ! Value at South Pole     
70    IF (is_south_pole_dyn) THEN
71       pu(:,jm) = -px (1,jm)
72       pv(:,jm) = -py (1,jm)
73       pr(:,jm) = 0.0
74    ENDIF
75
76  ELSE IF (grid_type==unstructured) THEN
77     ! Pole nord pour Dynamico
78     WHERE ( plat(:,:) >= 90.0-reps )
79        pu(:,:) =  py(:,:)
80        pv(:,:) = -px(:,:)
81        pr(:,:) = 0.0e0
82     END WHERE
83
84  ELSE
85     abort_message='Problem: unknown grid type'
86     CALL abort_physic(modname,abort_message,1)
87  END IF
88
89 
90 
91 
92END SUBROUTINE geo2atm
Note: See TracBrowser for help on using the repository browser.