source: codes/icosagcm/devel/src/kernels/flux_centered.k90 @ 585

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

devel : reconstruct fluxes at cell centers

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