source: LMDZ5/branches/LF-private/libf/dyn3d/interp_horiz.F @ 5061

Last change on this file since 5061 was 1403, checked in by Laurent Fairhead, 14 years ago

Merged LMDZ4V5.0-dev branch changes r1292:r1399 to trunk.

Validation:
Validation consisted in compiling the HEAD revision of the trunk,
LMDZ4V5.0-dev branch and the merged sources and running different
configurations on local and SX8 machines comparing results.

Local machine: bench configuration, 32x24x11, gfortran

  • IPSLCM5A configuration (comparison between trunk and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent
  • MH07 configuration, new physics package (comparison between LMDZ4V5.0-dev branch and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent

SX8 machine (brodie), 96x95x39 on 4 processors:

  • IPSLCM5A configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent
  • MH07 configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent

Changes to the makegcm and create_make_gcm scripts to take into account
main programs in F90 files


Fusion de la branche LMDZ4V5.0-dev (r1292:r1399) au tronc principal

Validation:
La validation a consisté à compiler la HEAD de le trunk et de la banche
LMDZ4V5.0-dev et les sources fusionnées et de faire tourner le modéle selon
différentes configurations en local et sur SX8 et de comparer les résultats

En local: 32x24x11, config bench/gfortran

  • pour une config IPSLCM5A (comparaison tronc/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux (à part sur RN et Pb)
    • fichiers histoire égaux
  • pour une config nlle physique (MH07) (comparaison LMDZ4v5.0-dev/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux
    • fichiers histoire équivalents

Sur brodie, 96x95x39 sur 4 proc:

  • pour une config IPSLCM5A:
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc
  • pour une config MH07
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc

Changement sur makegcm et create_make-gcm pour pouvoir prendre en compte des
programmes principaux en *F90

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1c
2c $Id: interp_horiz.F 1403 2010-07-01 09:02:53Z abarral $
3c
4      subroutine interp_horiz (varo,varn,imo,jmo,imn,jmn,lm,
5     &  rlonuo,rlatvo,rlonun,rlatvn) 
6
7c===========================================================
8c  Interpolation Horizontales des variables d'une grille LMDZ
9c (des points SCALAIRES au point SCALAIRES)
10c  dans une autre grille LMDZ en conservant la quantite
11c  totale pour les variables intensives (/m2) : ex : Pression au sol
12c
13c Francois Forget (01/1995)
14c===========================================================
15
16      IMPLICIT NONE
17
18c   Declarations:
19c ==============
20c
21c  ARGUMENTS
22c  """""""""
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
36c Autres variables
37c """"""""""""""""
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
42c    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
59c initialisation
60c --------------
61c Si c'est le premier appel, on prepare l'interpolation
62c en calculant pour chaque case autour d'un point scalaire de la
63c nouvelle grille, la surface  de intersection avec chaque
64c    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       
79c Interpolation horizontale
80c -------------------------
81c boucle sur toute les ktotal intersections entre les cases
82c de l'ancienne et la  nouvelle grille
83c
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
93c Une seule valeur au pole pour les variables ! :
94c -----------------------------------------------
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
109c---------------------------------------------------------------
110c  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
143c FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST  FIN TEST
144c---------------------------------------------------------------
145
146
147
148
149
150
151
152
153        return
154        end
Note: See TracBrowser for help on using the repository browser.