My Project
 All Classes Files Functions Variables Macros
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 #include "dimensions.h"
40  INTEGER :: npcfmip
41  REAL, DIMENSION(npCFMIP) :: loncfmip, latcfmip
42  INTEGER :: i, j, np, ip
43  INTEGER, DIMENSION(npCFMIP) :: ipt, jpt
44  REAL :: dlon1, dlon2
45  REAL :: dlat1, dlat2
46  REAL, DIMENSION(iim+1) :: lon
47  INTEGER, DIMENSION(npCFMIP) :: tabijgcm
48  REAL, DIMENSION(npCFMIP) :: longcm, latgcm
49 
50  lon(1:iim)=io_lon(:)
51  lon(iim+1)=-1*lon(1)
52  OPEN(22, file="LMDZ_pointsCFMIP.txt")
53  DO np=1, npcfmip
54  DO i=1, iim
55 !
56 ! PRINT*,'IM np i lonCF lonGCM lonGCM+1',np,i,lonCFMIP(np),lon(i), &
57 ! lon(i+1)
58 !
59  IF(loncfmip(np).GE.lon(i).AND.loncfmip(np).LT.lon(i+1)) THEN
60  dlon1 = abs(loncfmip(np) - lon(i))
61  dlon2 = abs(loncfmip(np) - lon(i+1))
62  IF (dlon1.LE.dlon2) THEN
63  ipt(np)=i
64  ELSE
65  ipt(np)=i+1
66  ENDIF
67  ENDIF
68  END DO
69  END DO
70 !
71  np=1
72 30 j=1
73 40 IF(latcfmip(np).LE.io_lat(j).AND.latcfmip(np).GE.io_lat(j+1)) THEN
74  dlat1 = abs(latcfmip(np) - io_lat(j))
75  dlat2 = abs(latcfmip(np) - io_lat(j+1))
76  IF (dlat1.LE.dlat2) THEN
77  jpt(np)=j
78  ELSE
79  jpt(np)=j+1
80  ENDIF
81  np=np+1
82  IF(np.LE.npcfmip) THEN
83  goto 30
84  ENDIF
85  ELSE
86  j=j+1
87  IF(j.LE.jjm) THEN
88  goto 40
89  ENDIF
90  ENDIF
91 
92  DO np=1, npcfmip
93  WRITE(22,*) lon(ipt(np)), io_lat(jpt(np))
94  ENDDO
95  CLOSE(22)
96 
97  OPEN(23, file="pointsCFMIPvsLMDZ.txt")
98  DO ip=1, npcfmip
99  longcm(ip)=lon(ipt(ip))
100  latgcm(ip)=io_lat(jpt(ip))
101  if(jpt(ip).GE.2.AND.jpt(ip).LE.jjm) THEN
102  tabijgcm(ip)=1+(jpt(ip)-2)*iim+ipt(ip)
103  else if(jpt(ip).EQ.1) THEN
104  tabijgcm(ip)=1
105  else if(jpt(ip).EQ.jjm+1) THEN
106  tabijgcm(ip)=klon_glo
107  else
108  print*,'ip jpt tabijGCM',ip,jpt(ip),tabijgcm(ip)
109  endif
110 ! PRINT*,'CFMIP ip lon lat tabijGCM',ip,lonGCM(ip),latGCM(ip),tabijGCM(ip)
111  ENDDO
112  DO ip=1, npcfmip
113  if(longcm(ip).EQ.io_lon(1)) longcm(ip)=360.+longcm(ip)
114  ENDDO
115  DO i=1, npcfmip
116  WRITE(23,*) i, loncfmip(i), latcfmip(i), longcm(i), latgcm(i), tabijgcm(i)
117  ENDDO
118  CLOSE(23)
119  END SUBROUTINE lmdz_cfmip_point_locations
120 
121 END MODULE cfmip_point_locations