source: LMDZ6/trunk/libf/phylmd/Dust/read_surface.F90 @ 5073

Last change on this file since 5073 was 5073, checked in by abarral, 3 months ago

Remove all NC_DOUBLE uses outside of lmdz_netcdf.F90 (except in obsolete/, which I hope we'll ditch soon...)
Note: make sure to check convergence at some point, it's possible that we've messed up some when replacing nf_* by nf90_* calls
(lint) replace obsolete logical operators along the way

File size: 4.3 KB
Line 
1       subroutine read_surface(name,surfa)
2
3     
4! common
5! ------
6       USE ioipsl
7!       USE comgeomphy
8       USE dimphy
9       USE mod_grid_phy_lmdz
10       USE mod_phys_lmdz_para
11       USE iophy
12!       USE netcdf
13       IMPLICIT NONE
14
15       INCLUDE "netcdf.inc"
16       INCLUDE "dimensions.h"
17       INCLUDE "paramet.h"
18
19       character*10 name
20       character*10 varname
21!
22       real tmp_dyn(iip1,jjp1)
23       real tmp_dyn_glo(nbp_lon+1,nbp_lat)
24!       real tmp_dyn_glo(nbp_lon,nbp_lat)
25       REAL tmp_dyn_invers(iip1,jjp1)
26       real tmp_dyn_invers_glo(nbp_lon+1,nbp_lat)
27!       real tmp_dyn_invers_glo(nbp_lon,nbp_lat)
28       real tmp_fi(klon)
29       real tmp_fi_glo(klon_glo)
30       real surfa(klon,5)
31       real surfa_glo(klon_glo,5)
32!
33       integer ncid
34       integer varid
35       real rcode
36       integer start(2),count(2),status
37       integer i,j,l,ig
38       character*1 str1
39
40!JE20140526<<
41      character*4 ::  latstr,aux4s
42      logical :: outcycle, isinversed
43      real, dimension(jjp1) :: lats
44      real, dimension(nbp_lat) :: lats_glo
45      real :: rcode2
46      integer, dimension(1) :: startj,endj
47!JE20140526>>
48!$OMP MASTER
49       IF (is_mpi_root .AND. is_omp_root) THEN
50
51       print*,'Lecture du fichier donnees_lisa.nc'
52       ncid=NCOPN('donnees_lisa.nc',NCNOWRIT,rcode)
53
54!JE20140526<<: check if are inversed or not the latitude grid in donnes_lisa
55      outcycle=.false.
56      latstr='null'
57      isinversed=.false.
58      do i=1,5
59       if (i==1) aux4s='latu'
60       if (i==2) aux4s='LATU'
61       if (i==3) aux4s='LatU'
62       if (i==4) aux4s='Latu'
63       if (i==5) aux4s='latU'
64       status = NF_INQ_VARID (ncid, aux4s, rcode)
65!       print *,'stat,i',status,i,outcycle,aux4s
66!       print *,'ifclause',status.NE. NF_NOERR ,outcycle == .false.
67       IF ((.not.(status/= NF_NOERR) ).and.( .not. outcycle )) THEN
68         outcycle=.true.
69         latstr=aux4s
70       ENDIF
71      enddo ! check if it inversed lat
72      startj(1)=1
73!      endj(1)=jjp1
74      endj(1)=nbp_lat
75      varid=NCVID(ncid,latstr,rcode)
76
77          status=nf90_get_var(ncid,varid,lats_glo,startj,endj)
78!      print *,latstr,varid,status,jjp1,rcode
79!      IF (status .NE. NF_NOERR) print*,'NOOOOOOO'
80!      print *,lats
81!stop
82
83! check if netcdf is latitude inversed or not.
84      if (lats_glo(1)<lats_glo(2)) isinversed=.true.
85! JE20140526>>
86
87
88       DO i=1,5
89          write(str1,'(i1)') i
90          varname=trim(name)//str1
91       print*,'lecture variable:',varname
92          varid=NCVID(ncid,trim(varname),rcode)
93!          varid=NCVID(ncid,varname,rcode)
94
95!  dimensions pour les champs scalaires et le vent zonal
96!  -----------------------------------------------------
97
98          start(1)=1
99          start(2)=1     
100          count(1)=nbp_lon+1
101!          count(1)=iip1
102          count(2)=nbp_lat
103!          count(2)=jjp1
104
105! mise a zero des tableaux
106! ------------------------
107          tmp_dyn(:,:)=0.0
108          tmp_fi(:)=0.0
109! Lecture
110! -----------------------
111          status=nf90_get_var(ncid,varid,tmp_dyn_glo,start,count)
112
113!      call dump2d(iip1,jjp1,tmp_dyn,'tmp_dyn   ')
114       DO j=1, nbp_lat
115          DO ig=1, nbp_lon+1
116             tmp_dyn_invers_glo(ig,j)=tmp_dyn_glo(ig,nbp_lat-j+1)
117          ENDDO
118       ENDDO
119
120       
121!JE20140522!          call gr_dyn_fi_p(1, iip1, jjp1, klon, tmp_dyn_invers, tmp_fi)
122
123!JE20140526<<
124!              call gr_dyn_fi(1, iip1, jjp1, klon, tmp_dyn_invers, tmp_fi)
125           if (isinversed) then
126                        call gr_dyn_fi(1, nbp_lon+1, nbp_lat, klon_glo, &
127     & tmp_dyn_invers_glo, tmp_fi_glo)
128!              call gr_dyn_fi(1, iip1, jjp1, klon, tmp_dyn_invers, tmp_fi)
129!              call gr_dyn_fi_p(1, iip1, jjp1, klon, tmp_dyn_invers, tmp_fi)
130           else     
131                        call gr_dyn_fi(1, nbp_lon+1, nbp_lat, klon_glo, &
132     &   tmp_dyn_glo, tmp_fi_glo)
133!              call gr_dyn_fi(1, iip1, jjp1, klon, tmp_dyn, tmp_fi)
134!              call gr_dyn_fi_p(1, iip1, jjp1, klon, tmp_dyn, tmp_fi)
135           endif
136!JE20140526>>
137!      call dump2d(iim,jjm-1,tmp_fi(2),'tmp_fi   ')
138!
139          DO j=1,klon_glo
140
141                surfa_glo(j,i)=tmp_fi_glo(j)
142
143          ENDDO ! Fin de recopie du tableau
144!
145       ENDDO ! Fin boucle 1 a 5
146       print*,'Passage Grille Dyn -> Phys'
147
148
149      ENDIF !mpi
150!$OMP END MASTER
151!$OMP BARRIER
152      call scatter(surfa_glo,surfa)
153
154
155       return
156       end subroutine read_surface
Note: See TracBrowser for help on using the repository browser.