LMDZ
cfmip_point_locations.F90
Go to the documentation of this file.
2  IMPLICIT NONE
3 
4 CONTAINS
5 
6  SUBROUTINE read_cfmip_point_locations(npCFMIP, tab, lonCFMIP, latCFMIP)
7  IMPLICIT none
8  INTEGER :: npCFMIP
9  REAL, DIMENSION(npCFMIP) :: lonCFMIP, latCFMIP
10  INTEGER :: tab(npcfmip), np
11 
12  WRITE(*,*) 'npCFMIP=',npcfmip
13 ! OPEN(20, file="pointlocations.txt",status='old')
14  OPEN(20, file="pointlocations.txt",status='old',err=999)
15  OPEN(21, file="pointlocations_lon180.txt")
16  np=1
17 10 READ(20,*) tab(np), loncfmip(np), latcfmip(np)
18 !!! passage de 0-360 a -180/180
19  IF (loncfmip(np).GT.180.) THEN
20  loncfmip(np)=loncfmip(np)-360.
21  ENDIF
22  WRITE(21,*) np, loncfmip(np), latcfmip(np)
23  np=np+1
24  IF(np.LE.npcfmip) THEN
25  GOTO 10
26  ENDIF
27  CLOSE(20)
28  CLOSE(21)
29 999 RETURN
30  END SUBROUTINE read_cfmip_point_locations
31 
32  SUBROUTINE lmdz_cfmip_point_locations(npCFMIP, lonCFMIP, latCFMIP, &
33  tabijgcm, longcm, latgcm, ipt, jpt)
34  USE dimphy
35  USE iophy
37 
38  IMPLICIT none
39  INTEGER :: npCFMIP
40  REAL, DIMENSION(npCFMIP) :: lonCFMIP, latCFMIP
41  INTEGER :: i, j, np, ip
42  INTEGER, DIMENSION(npCFMIP) :: ipt, jpt
43  REAL :: dlon1, dlon2
44  REAL :: dlat1, dlat2
45  REAL, DIMENSION(nbp_lon+1) :: lon
46  INTEGER, DIMENSION(npCFMIP) :: tabijGCM
47  REAL, DIMENSION(npCFMIP) :: lonGCM, latGCM
48 
49  lon(1:nbp_lon)=io_lon(:)
50  lon(nbp_lon+1)=-1*lon(1)
51  OPEN(22, file="LMDZ_pointsCFMIP.txt")
52  DO np=1, npcfmip
53  DO i=1, nbp_lon
54 !
55 ! PRINT*,'IM np i lonCF lonGCM lonGCM+1',np,i,lonCFMIP(np),lon(i), &
56 ! lon(i+1)
57 !
58  IF(loncfmip(np).GE.lon(i).AND.loncfmip(np).LT.lon(i+1)) THEN
59  dlon1 = abs(loncfmip(np) - lon(i))
60  dlon2 = abs(loncfmip(np) - lon(i+1))
61  IF (dlon1.LE.dlon2) THEN
62  ipt(np)=i
63  ELSE
64  ipt(np)=i+1
65  ENDIF
66  ENDIF
67  END DO
68  END DO
69 !
70  np=1
71 30 j=1
72 40 IF(latcfmip(np).LE.io_lat(j).AND.latcfmip(np).GE.io_lat(j+1)) THEN
73  dlat1 = abs(latcfmip(np) - io_lat(j))
74  dlat2 = abs(latcfmip(np) - io_lat(j+1))
75  IF (dlat1.LE.dlat2) THEN
76  jpt(np)=j
77  ELSE
78  jpt(np)=j+1
79  ENDIF
80  np=np+1
81  IF(np.LE.npcfmip) THEN
82  GOTO 30
83  ENDIF
84  ELSE
85  j=j+1
86  IF(j.LE.nbp_lat-1) THEN
87  GOTO 40
88  ENDIF
89  ENDIF
90 
91  DO np=1, npcfmip
92  WRITE(22,*) lon(ipt(np)), io_lat(jpt(np))
93  ENDDO
94  CLOSE(22)
95 
96  OPEN(23, file="pointsCFMIPvsLMDZ.txt")
97  DO ip=1, npcfmip
98  longcm(ip)=lon(ipt(ip))
99  latgcm(ip)=io_lat(jpt(ip))
100  if(jpt(ip).GE.2.AND.jpt(ip).LE.nbp_lat-1) THEN
101  tabijgcm(ip)=1+(jpt(ip)-2)*nbp_lon+ipt(ip)
102  else if(jpt(ip).EQ.1) THEN
103  tabijgcm(ip)=1
104  else if(jpt(ip).EQ.nbp_lat) THEN
105  tabijgcm(ip)=klon_glo
106  else
107  print*,'ip jpt tabijGCM',ip,jpt(ip),tabijgcm(ip)
108  endif
109 ! PRINT*,'CFMIP ip lon lat tabijGCM',ip,lonGCM(ip),latGCM(ip),tabijGCM(ip)
110  ENDDO
111  DO ip=1, npcfmip
112  if(longcm(ip).EQ.io_lon(1)) longcm(ip)=360.+longcm(ip)
113  ENDDO
114  DO i=1, npcfmip
115  WRITE(23,*) i, loncfmip(i), latcfmip(i), longcm(i), latgcm(i), tabijgcm(i)
116  ENDDO
117  CLOSE(23)
118  END SUBROUTINE lmdz_cfmip_point_locations
119 
120 END MODULE cfmip_point_locations
real, dimension(:), allocatable, save io_lat
Definition: iophy.F90:8
subroutine read_cfmip_point_locations(npCFMIP, tab, lonCFMIP, latCFMIP)
integer, save klon_glo
subroutine err(ierr, typ, nam)
Definition: dynetat0.f90:189
real, dimension(:), allocatable, save io_lon
Definition: iophy.F90:9
Definition: dimphy.F90:1
subroutine lmdz_cfmip_point_locations(npCFMIP, lonCFMIP, latCFMIP, tabijGCM, lonGCM, latGCM, ipt, jpt)
Definition: iophy.F90:4