source: LMDZ6/branches/Amaury_dev/libf/dyn3d/interp_horiz.F90 @ 5159

Last change on this file since 5159 was 5159, checked in by abarral, 3 months ago

Put dimensions.h and paramet.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1
2! $Id: interp_horiz.F90 5159 2024-08-02 19:58:25Z abarral $
3
4SUBROUTINE interp_horiz(varo, varn, imo, jmo, imn, jmn, lm, &
5        rlonuo, rlatvo, rlonun, rlatvn)
6
7  !===========================================================
8  !  Interpolation Horizontales des variables d'une grille LMDZ
9  ! (des points SCALAIRES au point SCALAIRES)
10  !  dans une autre grille LMDZ en conservant la quantite
11  !  totale pour les variables intensives (/m2) : ex : Pression au sol
12
13  ! Francois Forget (01/1995)
14  !===========================================================
15
16  IMPLICIT NONE
17
18  !   Declarations:
19  ! ==============
20
21  !  ARGUMENTS
22  !  """""""""
23
24  INTEGER :: imo, jmo ! dimensions ancienne grille (input)
25  INTEGER :: imn, jmn  ! dimensions nouvelle grille (input)
26
27  REAL :: rlonuo(imo + 1)     !  Latitude et
28  REAL :: rlatvo(jmo)       !  longitude des
29  REAL :: rlonun(imn + 1)     !  bord des
30  REAL :: rlatvn(jmn)     !  cases "scalaires" (input)
31
32  INTEGER :: lm ! dimension verticale (input)
33  REAL :: varo (imo + 1, jmo + 1, lm) ! var dans l'ancienne grille (input)
34  REAL :: varn (imn + 1, jmn + 1, lm) ! var dans la nouvelle grille (output)
35
36  ! Autres variables
37  ! """"""""""""""""
38  INTEGER :: ii, jj, l
39
40  REAL :: airen (imn + 1, jmn + 1) ! aire dans la nouvelle grille
41  !    Info sur les ktotal intersection entre les cases new/old grille
42  INTEGER :: kllm, k, ktotal
43  parameter (kllm = 400 * 200 * 10)
44  INTEGER :: iik(kllm), jjk(kllm), jk(kllm), ik(kllm)
45  REAL :: intersec(kllm)
46  REAL :: totn, tots
47
48  ! initialisation
49  ! --------------
50  ! Si c'est le premier appel, on prepare l'interpolation
51  ! en calculant pour chaque case autour d'un point scalaire de la
52  ! nouvelle grille, la surface  de intersection avec chaque
53  !    case de l'ancienne grille.
54
55  CALL iniinterp_horiz (imo, jmo, imn, jmn, kllm, &
56          rlonuo, rlatvo, rlonun, rlatvn, &
57          ktotal, iik, jjk, jk, ik, intersec, airen)
58
59  DO l = 1, lm
60    DO jj = 1, jmn + 1
61      DO ii = 1, imn + 1
62        varn(ii, jj, l) = 0.
63      END DO
64    END DO
65  END DO
66
67  ! Interpolation horizontale
68  ! -------------------------
69  ! boucle sur toute les ktotal intersections entre les cases
70  ! de l'ancienne et la  nouvelle grille
71
72  PRINT *, 'ktotal 1 = ', ktotal
73
74  DO k = 1, ktotal
75    DO l = 1, lm
76      varn(iik(k), jjk(k), l) = varn(iik(k), jjk(k), l) &
77              + varo(ik(k), jk(k), l) * intersec(k) / airen(iik(k), jjk(k))
78    END DO
79  END DO
80
81  ! Une seule valeur au pole pour les variables ! :
82  DO l = 1, lm
83    totn = 0.
84    tots = 0.
85    DO ii = 1, imn + 1
86      totn = totn + varn(ii, 1, l)
87      tots = tots + varn (ii, jmn + 1, l)
88    END DO
89    DO ii = 1, imn + 1
90      varn(ii, 1, l) = totn / REAL(imn + 1)
91      varn(ii, jmn + 1, l) = tots / REAL(imn + 1)
92    END DO
93  END DO
94
95END SUBROUTINE  interp_horiz
Note: See TracBrowser for help on using the repository browser.