1 |
module tau2alpha_m |
2 |
|
3 |
IMPLICIT NONE |
4 |
|
5 |
contains |
6 |
|
7 |
SUBROUTINE tau2alpha(lat_min_guide, lat_max_guide, factt, dxdy, rlat, & |
8 |
taumin, taumax, alpha) |
9 |
|
10 |
use init_tau2alpha_m, only: dxdy_min, dxdy_max, gamma |
11 |
USE nr_util, ONLY: assert_eq |
12 |
|
13 |
! Dans le cas où on n'a les analyses que sur une bande de latitudes : |
14 |
REAL, intent(in):: lat_min_guide ! minimum latitude for nudging, in rad |
15 |
real, intent(in):: lat_max_guide ! maximum latitude for nudging, in rad |
16 |
|
17 |
REAL, intent(in):: factt |
18 |
! pas de temps entre deux appels au guidage, en jours |
19 |
|
20 |
REAL, intent(in):: dxdy(:, :) ! (n_lon, n_lat) |
21 |
REAL, intent(in):: rlat(:) ! (n_lat) |
22 |
REAL, intent(in):: taumin, taumax |
23 |
real, intent(out):: alpha(:, :) ! (n_lon, n_lat) |
24 |
|
25 |
! Local: |
26 |
REAL a_min, a_max, xi |
27 |
INTEGER i, j, n_lon, n_lat |
28 |
|
29 |
!------------------------------------------------------------ |
30 |
|
31 |
PRINT *, 'Call sequence information: tau2alpha' |
32 |
|
33 |
n_lon = assert_eq(size(alpha, 1), size(dxdy, 1), "tau2alpha n_lon") |
34 |
n_lat = assert_eq(size(alpha, 2), size(dxdy, 2), size(rlat), & |
35 |
"tau2alpha n_lat") |
36 |
|
37 |
a_min = factt / taumax |
38 |
a_max = factt / taumin |
39 |
|
40 |
DO j = 1, n_lat |
41 |
IF (lat_min_guide <= rlat(j) .AND. rlat(j) <= lat_max_guide) THEN |
42 |
DO i = 1, n_lon |
43 |
xi = min(((dxdy_max - dxdy(i, j)) & |
44 |
/ (dxdy_max - dxdy_min))**gamma, 1.) |
45 |
alpha(i, j) = 1. - exp(- xi * a_min - (1. - xi) * a_max) |
46 |
END DO |
47 |
ELSE |
48 |
alpha(:, j) = 0. |
49 |
END IF |
50 |
END DO |
51 |
|
52 |
END SUBROUTINE tau2alpha |
53 |
|
54 |
end module tau2alpha_m |