Ticket #321: DIFF_grid_coord

File DIFF_grid_coord, 6.3 KB (added by mathieu, 15 years ago)
Line 
192,103c92,104
2< mc=FLT(ng)%Findex(0)
3< IF (FLT(ng)%Findex(0).gt.0) THEN
4< CALL hindices (ng, LBi, UBi, LBj, UBj, &
5< & IstrR, Iend+1, JstrR, Jend+1, &
6< & GRID(ng)%angler, &
7< & GRID(ng)%lonr, &
8< & GRID(ng)%latr, &
9< & 1, mc, 1, 1, &
10< & 1, mc, 1, 1, &
11< & FLT(ng)%Flon, &
12< & FLT(ng)%Flat, &
13< & Iflt, Jflt, spv, .FALSE.)
14---
15> IF (Lfloats(ng)) THEN
16> mc=FLT(ng)%Findex(0)
17> IF (FLT(ng)%Findex(0).gt.0) THEN
18> CALL hindices (ng, LBi, UBi, LBj, UBj, &
19> & IstrR, Iend+1, JstrR, Jend+1, &
20> & GRID(ng)%angler, &
21> & GRID(ng)%lonr, &
22> & GRID(ng)%latr, &
23> & 1, mc, 1, 1, &
24> & 1, mc, 1, 1, &
25> & FLT(ng)%Flon, &
26> & FLT(ng)%Flat, &
27> & Iflt, Jflt, spv, .FALSE.)
28105,106c106,107
29< CALL mp_collect (ng, model, mc, spv, Iflt)
30< CALL mp_collect (ng, model, mc, spv, Jflt)
31---
32> CALL mp_collect (ng, model, mc, spv, Iflt)
33> CALL mp_collect (ng, model, mc, spv, Jflt)
34108,114c109,116
35< DO i=1,mc
36< l=FLT(ng)%Findex(i)
37< FLT(ng)%Tinfo(ixgrd,l)=MIN(MAX(0.5_r8,Iflt(i)), &
38< & REAL(Lm(ng),r8)+0.5_r8)
39< FLT(ng)%Tinfo(iygrd,l)=MIN(MAX(0.5_r8,Jflt(i)), &
40< & REAL(Mm(ng),r8)+0.5_r8)
41< END DO
42---
43> DO i=1,mc
44> l=FLT(ng)%Findex(i)
45> FLT(ng)%Tinfo(ixgrd,l)=MIN(MAX(0.5_r8,Iflt(i)), &
46> & REAL(Lm(ng),r8)+0.5_r8)
47> FLT(ng)%Tinfo(iygrd,l)=MIN(MAX(0.5_r8,Jflt(i)), &
48> & REAL(Mm(ng),r8)+0.5_r8)
49> END DO
50> END IF
51122,131c124,135
52< DO l=1,Nfloats(ng)
53< IF ((Xstr.le.FLT(ng)%Tinfo(ixgrd,l)).and. &
54< & (FLT(ng)%Tinfo(ixgrd,l).lt.Xend).and. &
55< & (Ystr.le.FLT(ng)%Tinfo(iygrd,l)).and. &
56< & (FLT(ng)%Tinfo(iygrd,l).lt.Yend)) THEN
57< MyThread(l)=.TRUE.
58< ELSE
59< MyThread(l)=.FALSE.
60< END IF
61< END DO
62---
63> IF (Lfloats(ng)) THEN
64> DO l=1,Nfloats(ng)
65> IF ((Xstr.le.FLT(ng)%Tinfo(ixgrd,l)).and. &
66> & (FLT(ng)%Tinfo(ixgrd,l).lt.Xend).and. &
67> & (Ystr.le.FLT(ng)%Tinfo(iygrd,l)).and. &
68> & (FLT(ng)%Tinfo(iygrd,l).lt.Yend)) THEN
69> MyThread(l)=.TRUE.
70> ELSE
71> MyThread(l)=.FALSE.
72> END IF
73> END DO
74> END IF
75147,165c151,162
76< FLT(ng)%Fz0(l)=spv
77< IF (MyThread(l)) THEN
78< zfloat=FLT(ng)%Tinfo(izgrd,l)
79< FLT(ng)%Fz0(l)=zfloat ! Save original value
80< Kflt(l)=zfloat
81< IF (zfloat.le.0.0_r8) THEN
82< i=INT(FLT(ng)%Tinfo(ixgrd,l)) ! Fractional positions
83< j=INT(FLT(ng)%Tinfo(iygrd,l)) ! are still in this cell
84< IF (zfloat.lt.GRID(ng)%z_w(i,j,0)) THEN
85< zfloat=GRID(ng)%z_w(i,j,0)+5.0_r8
86< FLT(ng)%Fz0(l)=zfloat
87< END IF
88< FLT(ng)%Tinfo(izgrd,l)=REAL(N(ng),r8)
89< DO k=N(ng),1,-1
90< IF ((GRID(ng)%z_w(i,j,k)-zfloat)* &
91< & (zfloat-GRID(ng)%z_w(i,j,k-1)).ge.0.0_r8) THEN
92< Kflt(l)=REAL(k-1,r8)+ &
93< & (zfloat-GRID(ng)%z_w(i,j,k-1))/ &
94< & GRID(ng)%Hz(i,j,k)
95---
96> IF (Lfloats(ng)) THEN
97> FLT(ng)%Fz0(l)=spv
98> IF (MyThread(l)) THEN
99> zfloat=FLT(ng)%Tinfo(izgrd,l)
100> FLT(ng)%Fz0(l)=zfloat ! Save original value
101> Kflt(l)=zfloat
102> IF (zfloat.le.0.0_r8) THEN
103> i=INT(FLT(ng)%Tinfo(ixgrd,l)) ! Fractional positions
104> j=INT(FLT(ng)%Tinfo(iygrd,l)) ! are still in this cell
105> IF (zfloat.lt.GRID(ng)%z_w(i,j,0)) THEN
106> zfloat=GRID(ng)%z_w(i,j,0)+5.0_r8
107> FLT(ng)%Fz0(l)=zfloat
108167c164,175
109< END DO
110---
111> FLT(ng)%Tinfo(izgrd,l)=REAL(N(ng),r8)
112> DO k=N(ng),1,-1
113> IF ((GRID(ng)%z_w(i,j,k)-zfloat)* &
114> & (zfloat-GRID(ng)%z_w(i,j,k-1)).ge.0.0_r8) THEN
115> Kflt(l)=REAL(k-1,r8)+ &
116> & (zfloat-GRID(ng)%z_w(i,j,k-1))/ &
117> & GRID(ng)%Hz(i,j,k)
118> END IF
119> END DO
120> END IF
121> ELSE
122> Kflt(l)=spv
123169,171d176
124< ELSE
125< Kflt(l)=spv
126< END IF
127173c178
128< FLT(ng)%Tinfo(izgrd,l)=0.0_r8
129---
130> FLT(ng)%Tinfo(izgrd,l)=0.0_r8
131174a180
132> END IF
133178,179c184,187
134< CALL mp_collect (ng, model, Nfloats(ng), spv, FLT(ng)%Fz0)
135< CALL mp_collect (ng, model, Nfloats(ng), spv, Kflt)
136---
137> IF (Lfloats(ng)) THEN
138> CALL mp_collect (ng, model, Nfloats(ng), spv, FLT(ng)%Fz0)
139> CALL mp_collect (ng, model, Nfloats(ng), spv, Kflt)
140> END IF
141181,183c189,193
142< DO l=1,Nfloats(ng)
143< FLT(ng)%Tinfo(izgrd,l)=Kflt(l)
144< END DO
145---
146> IF (Lfloats(ng)) THEN
147> DO l=1,Nfloats(ng)
148> FLT(ng)%Tinfo(izgrd,l)=Kflt(l)
149> END DO
150> END IF