GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: dyn3d/interp_horiz.F Lines: 0 20 0.0 %
Date: 2023-06-30 12:56:34 Branches: 0 16 0.0 %

Line Branch Exec Source
1
c
2
c $Id: interp_horiz.F 1907 2013-11-26 13:10:46Z lguez $
3
c
4
      subroutine interp_horiz (varo,varn,imo,jmo,imn,jmn,lm,
5
     &  rlonuo,rlatvo,rlonun,rlatvn)
6
7
c===========================================================
8
c  Interpolation Horizontales des variables d'une grille LMDZ
9
c (des points SCALAIRES au point SCALAIRES)
10
c  dans une autre grille LMDZ en conservant la quantite
11
c  totale pour les variables intensives (/m2) : ex : Pression au sol
12
c
13
c Francois Forget (01/1995)
14
c===========================================================
15
16
      IMPLICIT NONE
17
18
c   Declarations:
19
c ==============
20
c
21
c  ARGUMENTS
22
c  """""""""
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
c Autres variables
37
c """"""""""""""""
38
       real airetest(imn+1,jmn+1)
39
       integer ii,jj,l
40
41
       real airen (imn+1,jmn+1) ! aire dans la nouvelle grille
42
c    Info sur les ktotal intersection entre les cases new/old grille
43
       integer kllm, k, ktotal
44
       parameter (kllm = 400*200*10)
45
       integer iik(kllm), jjk(kllm),jk(kllm),ik(kllm)
46
       real intersec(kllm)
47
       real R
48
       real totn, tots
49
50
       logical firstcall, firsttest, aire_ok
51
       save firsttest
52
       data firsttest /.true./
53
       data aire_ok /.true./
54
55
56
57
58
59
c initialisation
60
c --------------
61
c Si c'est le premier appel, on prepare l'interpolation
62
c en calculant pour chaque case autour d'un point scalaire de la
63
c nouvelle grille, la surface  de intersection avec chaque
64
c    case de l'ancienne grille.
65
66
67
        call iniinterp_horiz (imo,jmo,imn,jmn ,kllm,
68
     &       rlonuo,rlatvo,rlonun,rlatvn,
69
     &          ktotal,iik,jjk,jk,ik,intersec,airen)
70
71
      do l=1,lm
72
       do jj =1 , jmn+1
73
        do ii=1, imn+1
74
          varn(ii,jj,l) =0.
75
        end do
76
       end do
77
      end do
78
79
c Interpolation horizontale
80
c -------------------------
81
c boucle sur toute les ktotal intersections entre les cases
82
c de l'ancienne et la  nouvelle grille
83
c
84
      PRINT *, 'ktotal 1 = ', ktotal
85
86
      do k=1,ktotal
87
        do l=1,lm
88
         varn(iik(k),jjk(k),l) = varn(iik(k),jjk(k),l)
89
     &        + varo(ik(k), jk(k),l)*intersec(k)/airen(iik(k),jjk(k))
90
        end do
91
      end do
92
93
c Une seule valeur au pole pour les variables ! :
94
c -----------------------------------------------
95
       do l=1, lm
96
         totn =0.
97
         tots =0.
98
           do ii =1, imn+1
99
             totn = totn + varn(ii,1,l)
100
             tots = tots + varn (ii,jmn+1,l)
101
           end do
102
           do ii =1, imn+1
103
             varn(ii,1,l) = totn/REAL(imn+1)
104
             varn(ii,jmn+1,l) = tots/REAL(imn+1)
105
           end do
106
       end do
107
108
109
c---------------------------------------------------------------
110
c  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST
111
!!       if (.not.(firsttest)) goto 99
112
!!       firsttest = .false.
113
!! !     write (*,*) 'INTERP. HORIZ. : TEST SUR LES AIRES:'
114
!!       do jj =1 , jmn+1
115
!!         do ii=1, imn+1
116
!!           airetest(ii,jj) =0.
117
!!         end do
118
!!       end do
119
!!       PRINT *, 'ktotal = ', ktotal
120
!!       PRINT *, 'jmn+1 =', jmn+1, 'imn+1', imn+1
121
!!
122
!!       do k=1,ktotal
123
!!          airetest(iik(k),jjk(k))= airetest(iik(k),jjk(k)) +intersec(k)
124
!!       end DO
125
!!
126
!!
127
!!       PRINT *, 'fin boucle'
128
!!       do jj =1 , jmn+1
129
!!        do ii=1, imn+1
130
!!          r = airen(ii,jj)/airetest(ii,jj)
131
!!          if ((r.gt.1.001).or.(r.lt.0.999)) then
132
!! !             write (*,*) '********** PROBLEME D'' AIRES !!!',
133
!! !     &                   ' DANS L''INTERPOLATION HORIZONTALE'
134
!! !             write(*,*)'ii,jj,airen,airetest',
135
!! !     &          ii,jj,airen(ii,jj),airetest(ii,jj)
136
!!              aire_ok = .false.
137
!!          end if
138
!!        end do
139
!!       end do
140
!! !      if (aire_ok) write(*,*) 'INTERP. HORIZ. : AIRES OK'
141
!!  99   continue
142
143
c FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST
144
c---------------------------------------------------------------
145
146
147
148
149
150
151
152
153
        return
154
        end