GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/geo2atm.F90 Lines: 0 19 0.0 %
Date: 2023-06-30 12:51:15 Branches: 0 54 0.0 %

Line Branch Exec Source
1
!
2
! $Header: /home/cvsroot/LMDZ4/libf/phylmd/geo2atm.F90,v 1.1 2008-12-05 17:56:40 lsce Exp $
3
!
4
SUBROUTINE 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
80
END SUBROUTINE geo2atm