source: LMDZ4/trunk/libf/dyn3dpar/friction_p.F @ 3710

Last change on this file since 3710 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: 3.2 KB
Line 
1!
2! $Id: friction_p.F 1403 2010-07-01 09:02:53Z adurocher $
3!
4c=======================================================================
5      SUBROUTINE friction_p(ucov,vcov,pdt)
6      USE parallel
7      USE control_mod
8      IMPLICIT NONE
9
10c=======================================================================
11c
12c
13c   Objet:
14c   ------
15c
16c  ***********
17c    Friction
18c  ***********
19c
20c=======================================================================
21
22#include "dimensions.h"
23#include "paramet.h"
24#include "comgeom2.h"
25#include "comconst.h"
26
27      REAL pdt
28      REAL modv(iip1,jjp1),zco,zsi
29      REAL vpn,vps,upoln,upols,vpols,vpoln
30      REAL u2(iip1,jjp1),v2(iip1,jjm)
31      REAL ucov( iip1,jjp1,llm ),vcov( iip1,jjm,llm )
32      INTEGER  i,j
33      REAL cfric
34      parameter (cfric=1.e-5)
35      integer :: jjb,jje
36
37
38c   calcul des composantes au carre du vent naturel
39      jjb=jj_begin
40      jje=jj_end+1
41      if (pole_sud) jje=jj_end
42     
43      do j=jjb,jje
44         do i=1,iip1
45            u2(i,j)=ucov(i,j,1)*ucov(i,j,1)*unscu2(i,j)
46         enddo
47      enddo
48     
49      jjb=jj_begin-1
50      jje=jj_end+1
51      if (pole_nord) jjb=jj_begin
52      if (pole_sud) jje=jj_end-1
53     
54      do j=jjb,jje
55         do i=1,iip1
56            v2(i,j)=vcov(i,j,1)*vcov(i,j,1)*unscv2(i,j)
57         enddo
58      enddo
59
60c   calcul du module de V en dehors des poles
61      jjb=jj_begin
62      jje=jj_end+1
63      if (pole_nord) jjb=jj_begin+1
64      if (pole_sud) jje=jj_end-1
65     
66      do j=jjb,jje
67         do i=2,iip1
68            modv(i,j)=sqrt(0.5*(u2(i-1,j)+u2(i,j)+v2(i,j-1)+v2(i,j)))
69         enddo
70         modv(1,j)=modv(iip1,j)
71      enddo
72
73c   les deux composantes du vent au pole sont obtenues comme
74c   premiers modes de fourier de v pres du pole
75      if (pole_nord) then
76     
77        upoln=0.
78        vpoln=0.
79     
80        do i=2,iip1
81           zco=cos(rlonv(i))*(rlonu(i)-rlonu(i-1))
82           zsi=sin(rlonv(i))*(rlonu(i)-rlonu(i-1))
83           vpn=vcov(i,1,1)/cv(i,1)
84           upoln=upoln+zco*vpn
85           vpoln=vpoln+zsi*vpn
86        enddo
87        vpn=sqrt(upoln*upoln+vpoln*vpoln)/pi
88        do i=1,iip1
89c          modv(i,1)=vpn
90           modv(i,1)=modv(i,2)
91        enddo
92
93      endif
94     
95      if (pole_sud) then
96     
97        upols=0.
98        vpols=0.
99        do i=2,iip1
100           zco=cos(rlonv(i))*(rlonu(i)-rlonu(i-1))
101           zsi=sin(rlonv(i))*(rlonu(i)-rlonu(i-1))
102           vps=vcov(i,jjm,1)/cv(i,jjm)
103           upols=upols+zco*vps
104           vpols=vpols+zsi*vps
105        enddo
106        vps=sqrt(upols*upols+vpols*vpols)/pi
107        do i=1,iip1
108c        modv(i,jjp1)=vps
109         modv(i,jjp1)=modv(i,jjm)
110        enddo
111     
112      endif
113     
114c   calcul du frottement au sol.
115
116      jjb=jj_begin
117      jje=jj_end
118      if (pole_nord) jjb=jj_begin+1
119      if (pole_sud) jje=jj_end-1
120
121      do j=jjb,jje
122         do i=1,iim
123            ucov(i,j,1)=ucov(i,j,1)
124     s      -cfric*pdt*0.5*(modv(i+1,j)+modv(i,j))*ucov(i,j,1)
125         enddo
126         ucov(iip1,j,1)=ucov(1,j,1)
127      enddo
128     
129      jjb=jj_begin
130      jje=jj_end
131      if (pole_sud) jje=jj_end-1
132     
133      do j=jjb,jje
134         do i=1,iip1
135            vcov(i,j,1)=vcov(i,j,1)
136     s      -cfric*pdt*0.5*(modv(i,j+1)+modv(i,j))*vcov(i,j,1)
137         enddo
138         vcov(iip1,j,1)=vcov(1,j,1)
139      enddo
140
141      RETURN
142      END
143
Note: See TracBrowser for help on using the repository browser.