source: codes/icosagcm/trunk/src/kernels/flux_centered.k90

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

trunk : backported commits r582-r598 (transport diagnostics)

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