source: LMDZ4/trunk/libf/phylmd/albedo.F @ 5353

Last change on this file since 5353 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: 5.6 KB
RevLine 
[524]1!
[1403]2! $Id: albedo.F 1403 2010-07-01 09:02:53Z ymeurdesoif $
[524]3!
4c
5c
6      SUBROUTINE alboc(rjour,rlat,albedo)
[766]7      USE dimphy
[524]8      IMPLICIT none
9c======================================================================
10c Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
11c Date: le 16 mars 1995
12c Objet: Calculer l'albedo sur l'ocean
13c Methode: Integrer numeriquement l'albedo pendant une journee
14c
15c Arguments;
16c rjour (in,R)  : jour dans l'annee (a compter du 1 janvier)
17c rlat (in,R)   : latitude en degre
18c albedo (out,R): albedo obtenu (de 0 a 1)
19c======================================================================
[766]20cym#include "dimensions.h"
21cym#include "dimphy.h"
[524]22#include "YOMCST.h"
[830]23#include "clesphys.h"
[524]24c
[830]25c fmagic -> clesphys.h/.inc
26c     REAL fmagic ! un facteur magique pour regler l'albedo
[524]27ccc      PARAMETER (fmagic=0.7)
28cccIM => a remplacer 
[584]29c       PARAMETER (fmagic=1.32)
[830]30c       PARAMETER (fmagic=1.0)
[524]31c       PARAMETER (fmagic=0.7)
32      INTEGER npts ! il controle la precision de l'integration
33      PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
34c
35      REAL rlat(klon), rjour, albedo(klon)
36      REAL zdist, zlonsun, zpi, zdeclin
37      REAL rmu,alb, srmu, salb, fauxo, aa, bb
38      INTEGER i, k
39cccIM
40      LOGICAL ancien_albedo
41      PARAMETER(ancien_albedo=.FALSE.)
42c     SAVE albedo
43c
44      IF ( ancien_albedo ) THEN
45c
46      zpi = 4. * ATAN(1.)
47c
48c Calculer la longitude vraie de l'orbite terrestre:
49      CALL orbite(rjour,zlonsun,zdist)
50c
51c Calculer la declinaison du soleil (qui varie entre + et - R_incl):
52      zdeclin = ASIN(SIN(zlonsun*zpi/180.0)*SIN(R_incl*zpi/180.0))
53c
54      DO 999 i=1,klon
55      aa = SIN(rlat(i)*zpi/180.0) * SIN(zdeclin)
56      bb = COS(rlat(i)*zpi/180.0) * COS(zdeclin)
57c
58c Midi local (angle du temps = 0.0):
59      rmu = aa + bb * COS(0.0)
60      rmu = MAX(0.0, rmu)
61      fauxo = (1.47-ACOS(rmu))/.15
62      alb = 0.03+0.630/(1.+fauxo*fauxo)
63      srmu = rmu
64      salb = alb * rmu
65c
66c Faire l'integration numerique de midi a minuit (le facteur 2
67c prend en compte l'autre moitie de la journee):
68      DO k = 1, npts
[1403]69         rmu = aa + bb * COS(REAL(k)/REAL(npts)*zpi)
[524]70         rmu = MAX(0.0, rmu)
71         fauxo = (1.47-ACOS(rmu))/.15
72         alb = 0.03+0.630/(1.+fauxo*fauxo)
73         srmu = srmu + rmu * 2.0
74         salb = salb + alb*rmu * 2.0
75      ENDDO
76      IF (srmu .NE. 0.0) THEN
[900]77         albedo(i) = salb / srmu * fmagic+pmagic
[524]78      ELSE ! nuit polaire (on peut prendre une valeur quelconque)
79         albedo(i) = fmagic
80      ENDIF
81  999 CONTINUE
82c
83c nouvel albedo
84c
85      ELSE
86c
87      zpi = 4. * ATAN(1.)
88c
89c Calculer la longitude vraie de l'orbite terrestre:
90      CALL orbite(rjour,zlonsun,zdist)
91c
92c Calculer la declinaison du soleil (qui varie entre + et - R_incl):
93      zdeclin = ASIN(SIN(zlonsun*zpi/180.0)*SIN(R_incl*zpi/180.0))
94c
95      DO 1999 i=1,klon
96      aa = SIN(rlat(i)*zpi/180.0) * SIN(zdeclin)
97      bb = COS(rlat(i)*zpi/180.0) * COS(zdeclin)
98c
99c Midi local (angle du temps = 0.0):
100      rmu = aa + bb * COS(0.0)
101      rmu = MAX(0.0, rmu)
102cIM cf. PB  alb = 0.058/(rmu + 0.30)
103c     alb = 0.058/(rmu + 0.30) * 1.5
104      alb = 0.058/(rmu + 0.30) * 1.2
105c     alb = 0.058/(rmu + 0.30) * 1.3
106      srmu = rmu
107      salb = alb * rmu
108c
109c Faire l'integration numerique de midi a minuit (le facteur 2
110c prend en compte l'autre moitie de la journee):
111      DO k = 1, npts
[1403]112         rmu = aa + bb * COS(REAL(k)/REAL(npts)*zpi)
[524]113         rmu = MAX(0.0, rmu)
114cIM cf. PB      alb = 0.058/(rmu + 0.30)
115c        alb = 0.058/(rmu + 0.30) * 1.5
116         alb = 0.058/(rmu + 0.30) * 1.2
117c        alb = 0.058/(rmu + 0.30) * 1.3
118         srmu = srmu + rmu * 2.0
119         salb = salb + alb*rmu * 2.0
120      ENDDO
121      IF (srmu .NE. 0.0) THEN
[900]122         albedo(i) = salb / srmu * fmagic+pmagic
[524]123      ELSE ! nuit polaire (on peut prendre une valeur quelconque)
124         albedo(i) = fmagic
125      ENDIF
1261999  CONTINUE
127      ENDIF
128      RETURN
129      END
130c=====================================================================
131      SUBROUTINE alboc_cd(rmu0,albedo)
[766]132      USE dimphy
[524]133      IMPLICIT none
134c======================================================================
135c Auteur(s): Z.X. Li (LMD/CNRS)
136c date: 19940624
137c Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
138c Formule due a Larson and Barkstrom (1977) Proc. of the symposium
139C on radiation in the atmosphere, 19-28 August 1976, science Press,
140C 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
141c
142c Arguments
143c rmu0    (in): cosinus de l'angle solaire zenithal
144c albedo (out): albedo de surface de l'ocean
145c======================================================================
[766]146cym#include "dimensions.h"
147cym#include "dimphy.h"
[830]148#include "clesphys.h"
[524]149      REAL rmu0(klon), albedo(klon)
150c
[830]151c     REAL fmagic ! un facteur magique pour regler l'albedo
[524]152ccc      PARAMETER (fmagic=0.7)
153cccIM => a remplacer 
[584]154c       PARAMETER (fmagic=1.32)
[830]155c       PARAMETER (fmagic=1.0)
[524]156c       PARAMETER (fmagic=0.7)
157c
158      REAL fauxo
159      INTEGER i
160cccIM
161      LOGICAL ancien_albedo
162      PARAMETER(ancien_albedo=.FALSE.)
163c     SAVE albedo
164c
165      IF ( ancien_albedo ) THEN
166c
167      DO i = 1, klon
168c
169         rmu0(i) = MAX(rmu0(i),0.0)
170c
171         fauxo = ( 1.47 - ACOS( rmu0(i) ) )/0.15
[900]172         albedo(i) = fmagic*( .03 + .630/( 1. + fauxo*fauxo))+pmagic
[524]173         albedo(i) = MAX(MIN(albedo(i),0.60),0.04)
174      ENDDO
175c
176c nouvel albedo
177c
178      ELSE
179c
180      DO i = 1, klon
181         rmu0(i) = MAX(rmu0(i),0.0)
182cIM:orig albedo(i) = 0.058/(rmu0(i) + 0.30)
[900]183         albedo(i) = fmagic * 0.058/(rmu0(i) + 0.30)+pmagic
[524]184         albedo(i) = MAX(MIN(albedo(i),0.60),0.04)
185      ENDDO
186c
187      ENDIF
188c
189      RETURN
190      END
191c========================================================================
Note: See TracBrowser for help on using the repository browser.