| 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 |
| 73 |
|
|
|