GCC Code Coverage Report


Directory: ./
File: phys/geo2atm.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 19 0.0%
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
81