source: LMDZ4/branches/V3_test/libf/phylmd/condsurf.F @ 1160

Last change on this file since 1160 was 704, checked in by Laurent Fairhead, 18 years ago

Inclusion des modifs de Y. Meurdesoif pour la version V3
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1c $Header$
2c
3      SUBROUTINE condsurf( jour, jourvrai, lmt_bils )
4      USE dimphy
5      IMPLICIT none
6c
7c I. Musat 05.2005
8c
9c Lire chaque jour le bilan de chaleur au sol issu
10c d'un run atmospherique afin de l'utiliser dans
11c dans un run "slab" ocean
12c -----------------------------------------
13c jour     : input  , numero du jour a lire
14c jourvrai : input  , vrai jour de la simulation 
15c
16c lmt_bils: bilan chaleur au sol (a utiliser pour "slab-ocean")
17c
18#include "netcdf.inc"
19      INTEGER nid, nvarid
20      INTEGER debut(2)
21      INTEGER epais(2)
22c
23cym#include "dimensions.h"
24cym#include "dimphy.h"
25#include "indicesol.h"
26#include "temps.h"
27#include "clesphys.h"
28c
29      INTEGER     nannemax
30      PARAMETER ( nannemax = 60 )
31c
32      INTEGER jour, jourvrai
33      REAL lmt_bils(klon) !bilan chaleur au sol
34c
35c Variables locales:
36      INTEGER ig, i, kt, ierr
37      LOGICAL ok
38      INTEGER anneelim,anneemax
39      CHARACTER*20 fich
40     
41      REAL :: lmt_bils_glo(klon2)
42      REAL,ALLOCATABLE,SAVE :: lmt_bils_mpi(:)
43     
44      LOGICAL,SAVE :: first
45c$OMP THREADPRIVATE(first)
46cc
47cc   .....................................................................
48cc
49cc    Pour lire le fichier limit correspondant vraiment  a l'annee de la
50cc     simulation en cours , il suffit de mettre  ok_limitvrai = .TRUE.
51cc
52cc   ......................................................................
53c
54c
55      IF (first) THEN
56        ALLOCATE(lmt_bils_mpi(klon_mpi))
57      ENDIF
58     
59      IF (jour.LT.0 .OR. jour.GT.(360-1)) THEN
60         PRINT*,'Le jour demande n est pas correct: ', jour
61         CALL ABORT
62      ENDIF
63c
64       anneelim  = annee_ref
65       anneemax  = annee_ref + nannemax
66c
67c
68       IF( ok_limitvrai )       THEN
69          DO  kt = 1, nannemax
70           IF(jourvrai.LE. (kt-1)*360 + 359  )  THEN
71              WRITE(fich,'("limit",i4,".nc")') anneelim
72c             PRINT *,' Fichier  Limite ',fich
73              GO TO 100
74             ENDIF
75           anneelim = anneelim + 1
76          ENDDO
77
78         PRINT *,' PBS ! Le jour a lire sur le fichier limit ne se '
79         PRINT *,' trouve pas sur les ',nannemax,' annees a partir de '
80         PRINT *,' l annee de debut', annee_ref
81         CALL EXIT(1)
82c
83100     CONTINUE
84c
85       ELSE
86     
87            WRITE(fich,'("limitNEW.nc")')
88c           PRINT *,' Fichier  Limite ',fich
89       ENDIF
90c
91c Ouvrir le fichier en format NetCDF:
92c
93c$OMP MASTER
94      IF (phy_rank==0) THEN
95      ierr = NF_OPEN (fich, NF_NOWRITE,nid)
96      IF (ierr.NE.NF_NOERR) THEN
97        WRITE(6,*)' Pb d''ouverture du fichier ', fich
98        WRITE(6,*)' Le fichier limit ',fich,' (avec 4 chiffres , pour'
99        WRITE(6,*)'       l an 2000 )  ,  n existe  pas !  '
100        WRITE(6,*)' ierr = ', ierr
101        CALL EXIT(1)
102      ENDIF
103c     DO k = 1, jour
104c La tranche de donnees a lire:
105c
106      debut(1) = 1
107      debut(2) = jourvrai
108      epais(1) = klon2
109      epais(2) = 1
110c
111c Bilan flux de chaleur au sol:
112c
113      ierr = NF_INQ_VARID (nid, "BILS", nvarid)
114      IF (ierr .NE. NF_NOERR) THEN
115         PRINT*, "condsurf: Le champ <BILS> est absent"
116         CALL abort
117      ENDIF
118      PRINT*,'debut,epais',debut,epais,'jour,jourvrai',jour,jourvrai
119#ifdef NC_DOUBLE
120      ierr = NF_GET_VARA_DOUBLE(nid, nvarid,debut,epais,lmt_bils_glo)
121#else
122      ierr = NF_GET_VARA_REAL(nid, nvarid,debut,epais,lmt_bils_glo)
123#endif
124      IF (ierr .NE. NF_NOERR) THEN
125         PRINT*, "condsurf: Lecture echouee pour <BILS>"
126         CALL abort
127      ENDIF
128c     ENDDO !k = 1, jour
129c
130c Fermer le fichier:
131c
132      ierr = NF_CLOSE(nid)
133     
134      ENDIF ! phyrank==0
135
136      CALL scatterField(lmt_bils_glo,lmt_bils_mpi,1)
137c$OMP END MASTER
138c$OMP BARRIER
139      CALL scatterField_omp(lmt_bils_mpi,lmt_bils,1)
140           
141c
142c
143c     PRINT*, 'lmt_bils est lu pour jour: ', jour
144c
145      RETURN
146      END
Note: See TracBrowser for help on using the repository browser.