source: LMDZ6/branches/Ocean_skin/libf/phylmd/geo2atm.F90 @ 3747

Last change on this file since 3747 was 3605, checked in by lguez, 5 years ago

Merge revisions 3427:3600 of trunk into branch Ocean_skin

  • 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: 2.2 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  IMPLICIT NONE
9  INCLUDE 'YOMCST.h'
10  CHARACTER (len = 6)                :: clmodnam
11  CHARACTER (len = 20)               :: modname = 'geo2atm'
12  CHARACTER (len = 80)               :: abort_message
13
14! Change wind coordinates from cartesian geocentric to local spherical
15! NB! Fonctionne probablement uniquement en MPI seul (sans OpenMP)
16!
17! Geocentric :
18  ! axe x is eastward : crosses (0N,90E) point.
19  ! axe y  crosses (0N,180E) point.
20  ! axe z is 'up' : crosses north pole.
21!
22! NB! Aux poles, fonctionne probablement uniquement en MPI seul (sans OpenMP)
23
24  INTEGER, INTENT (IN)                 :: im, jm
25  REAL, DIMENSION (im,jm), INTENT(IN)  :: px, py, pz
26  REAL, DIMENSION (im,jm), INTENT(IN)  :: plon, plat
27  REAL, DIMENSION (im,jm), INTENT(OUT) :: pu, pv, pr
28
29  REAL :: rad,reps
30
31
32  rad = rpi / 180.0E0
33  reps = 1.0e-5
34
35  pu(:,:) = &
36       - px(:,:) * SIN(rad * plon(:,:)) &
37       + py(:,:) * COS(rad * plon(:,:))
38
39  pv(:,:) = &
40       - px(:,:) * SIN(rad * plat(:,:)) * COS(rad * plon(:,:)) &
41       - py(:,:) * SIN(rad * plat(:,:)) * SIN(rad * plon(:,:)) &
42       + pz(:,:) * COS(rad * plat(:,:)) 
43
44  pr(:,:) = &
45       + px(:,:) * COS(rad * plat(:,:)) * COS(rad * plon(:,:)) &
46       + py(:,:) * COS(rad * plat(:,:)) * SIN(rad * plon(:,:)) &
47       + pz(:,:) * SIN(rad * plat(:,:))
48
49  IF (grid_type==regular_lonlat) THEN
50    ! Value at North Pole
51    IF (is_north_pole_dyn) THEN
52       pu(:, 1) = -px (1,1)
53       pv(:, 1) = -py (1,1)
54       pr(:, 1) = 0.0
55    ENDIF
56 
57    ! Value at South Pole     
58    IF (is_south_pole_dyn) THEN
59       pu(:,jm) = -px (1,jm)
60       pv(:,jm) = -py (1,jm)
61       pr(:,jm) = 0.0
62    ENDIF
63
64  ELSE IF (grid_type==unstructured) THEN
65     ! Pole nord pour Dynamico
66     WHERE ( plat(:,:) >= 90.0-reps )
67        pu(:,:) =  py(:,:)
68        pv(:,:) = -px(:,:)
69        pr(:,:) = 0.0e0
70     END WHERE
71
72  ELSE
73     abort_message='Problem: unknown grid type'
74     CALL abort_physic(modname,abort_message,1)
75  END IF
76
77 
78 
79 
80END SUBROUTINE geo2atm
Note: See TracBrowser for help on using the repository browser.