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

Line Branch Exec Source
1
!
2
! $Id: atm2geo.F90 3465 2019-03-14 09:34:31Z fairhead $
3
!
4
SUBROUTINE atm2geo ( im, jm, pte, ptn, plon, plat, pxx, pyy, pzz )
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
11
  CHARACTER (len = 6)                :: clmodnam
12
  CHARACTER (len = 20)               :: modname = 'atm2geo'
13
  CHARACTER (len = 80)               :: abort_message
14
15
!
16
! Change wind local atmospheric coordinates to geocentric
17
!
18
! Geocentric :
19
! axe x is eastward : crosses (0 N, 0 E) point.
20
! axe y crosses (0 N, 90 E) point.
21
! axe z is 'up' : crosses north pole
22
  INTEGER, INTENT (in)                 :: im, jm
23
  REAL, DIMENSION (im,jm), INTENT (in) :: pte  ! Eastward vector component
24
  REAL, DIMENSION (im,jm), INTENT (in) :: ptn  ! Northward vector component
25
  REAL, DIMENSION (im,jm), INTENT (in) :: plon, plat
26
  REAL, DIMENSION (im,jm), INTENT(out) :: pxx, pyy, pzz  ! Component in the geocentric referential
27
  REAL :: rad, reps
28
29
  rad = rpi / 180.0E0
30
  reps = 1.0e-5
31
32
  pxx(:,:) = &
33
       - pte(:,:) * SIN(rad * plon(:,:)) &
34
       - ptn(:,:) * SIN(rad * plat(:,:)) * COS(rad * plon(:,:))
35
36
  pyy(:,:) = &
37
       + pte(:,:) * COS(rad * plon(:,:)) &
38
       - ptn(:,:) * SIN(rad * plat(:,:)) * SIN(rad * plon(:,:))
39
40
  pzz(:,:) = &
41
       + ptn(:,:) * COS(rad * plat (:,:))
42
43
  IF (grid_type==regular_lonlat) THEN
44
  ! Value at North Pole
45
    IF (is_north_pole_dyn) THEN
46
       pxx(:, 1) = - pte (1, 1)
47
       pyy(:, 1) = - ptn (1, 1)
48
       pzz(:, 1) = pzz(1,1) ! => 0
49
    ENDIF
50
51
  ! Value at South Pole
52
    IF (is_south_pole_dyn) THEN
53
      pxx(:,jm) = pxx(1,jm)
54
       pyy(:,jm) = pyy(1,jm)
55
       pzz(:,jm) = pzz(1,jm) ! => 0
56
    ENDIF
57
58
  ELSE IF (grid_type==unstructured) THEN
59
     ! Pole nord pour Dynamico
60
     WHERE ( plat(:,:) >= 90.0d+0-reps )
61
        pxx (:,:) = -ptn (:,:)
62
        pyy (:,:) =  pte (:,:)
63
        pzz (:,:) =  0.0e0
64
     END WHERE
65
66
  ELSE
67
     abort_message='Problem: unknown grid type'
68
     CALL abort_physic(modname,abort_message,1)
69
  END IF
70
71
72
END SUBROUTINE atm2geo