source: codes/icosagcm/trunk/src/kernels/wind_centered.k90 @ 599

Last change on this file since 599 was 599, checked in by dubos, 7 years ago

trunk : backported commits r582-r598 (transport diagnostics)

File size: 2.4 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- wind_centered ----------------------------------
3   ! Perot reconstruction based on Gauss theorem
4   ! u = sum( u.edge_normal * edge_length * (edge_midpoint-cell_centroid) ) /cell_area
5   DO l = ll_begin, ll_end
6      !DIR$ SIMD
7      DO ij=ij_begin, ij_end
8         cx=centroid(ij,1)
9         cy=centroid(ij,2)
10         cz=centroid(ij,3)
11         ux=0. ; uy=0. ; uz=0.
12         ue_le = ne_rup*ue(ij+u_rup,l)*le(ij+u_rup)
13         ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_up,1))-cx)
14         uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_up,2))-cy)
15         uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_up,3))-cz)
16         ue_le = ne_lup*ue(ij+u_lup,l)*le(ij+u_lup)
17         ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_up,1))-cx)
18         uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_up,2))-cy)
19         uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_up,3))-cz)
20         ue_le = ne_left*ue(ij+u_left,l)*le(ij+u_left)
21         ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_ldown,1))-cx)
22         uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_ldown,2))-cy)
23         uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_ldown,3))-cz)
24         ue_le = ne_ldown*ue(ij+u_ldown,l)*le(ij+u_ldown)
25         ux = ux + ue_le*(.5*(xyz_v(ij+z_ldown,1)+xyz_v(ij+z_down,1))-cx)
26         uy = uy + ue_le*(.5*(xyz_v(ij+z_ldown,2)+xyz_v(ij+z_down,2))-cy)
27         uz = uz + ue_le*(.5*(xyz_v(ij+z_ldown,3)+xyz_v(ij+z_down,3))-cz)
28         ue_le = ne_rdown*ue(ij+u_rdown,l)*le(ij+u_rdown)
29         ux = ux + ue_le*(.5*(xyz_v(ij+z_rdown,1)+xyz_v(ij+z_down,1))-cx)
30         uy = uy + ue_le*(.5*(xyz_v(ij+z_rdown,2)+xyz_v(ij+z_down,2))-cy)
31         uz = uz + ue_le*(.5*(xyz_v(ij+z_rdown,3)+xyz_v(ij+z_down,3))-cz)
32         ue_le = ne_right*ue(ij+u_right,l)*le(ij+u_right)
33         ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_rdown,1))-cx)
34         uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_rdown,2))-cy)
35         uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_rdown,3))-cz)
36         fac = scale*(1./Ai(ij))
37         ucenter(ij,l,1)=ux*fac
38         ucenter(ij,l,2)=uy*fac
39         ucenter(ij,l,3)=uz*fac
40      END DO
41   END DO
42   !---------------------------- wind_centered ----------------------------------
43   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.