source: trunk/LMDZ.VENUS/Tools/reverse.F90 @ 937

Last change on this file since 937 was 816, checked in by slebonnois, 12 years ago

SL: tools for postprocessing (Veznus and Titan); see DOC/documentation/vt-tools.pdf

File size: 4.3 KB
RevLine 
[816]1subroutine reverse4d(nlon,nlat,np,nt,newf)
2!==============================================================================
3! Purpose:
4! reverse lat, lon and vertical axis on a 3D+time field
5!==============================================================================
6implicit none
7!==============================================================================
8! Arguments:
9!==============================================================================
10integer,intent(in) :: nlon ! longitude size
11integer,intent(in) :: nlat ! latitude size
12integer,intent(in) :: np   ! vertical size
13integer,intent(in) :: nt   ! time size
14real,intent(inout),dimension(nlon,nlat,np,nt) :: newf ! field to be reversed
15
16!==============================================================================
17! Local variables:
18!==============================================================================
19integer :: i,j,k,l
20real,dimension(nlon,nlat,np,nt) :: tmp,tmp2 ! reversed fields
21include "planet.h"
22
23! Vertical axis:
24    do k=1,np
25          tmp(:,:,k,:)=newf(:,:,np+1-k,:)
26    enddo
27! horizontal dimensions
28if(planet.eq."Venus") then
29  do l=1,nt
30      do i=1,nlat
31        do j=1,nlon
32          tmp2(j,i,:,l)=tmp(nlon+1-j,nlat+1-i,:,l)
33        enddo
34      enddo
35  enddo
36else
37  tmp2=tmp
38endif
39
40newf=tmp2
41
42end subroutine reverse4d
43
44!===============================================================================
45
46subroutine reverse2d(nlon,nlat,newf)
47!==============================================================================
48! Purpose:
49! reverse lat and lon on a 2D field
50!==============================================================================
51implicit none
52!==============================================================================
53! Arguments:
54!==============================================================================
55integer,intent(in) :: nlon ! longitude size
56integer,intent(in) :: nlat ! latitude size
57real,intent(inout),dimension(nlon,nlat) :: newf ! field to be reversed
58
59!==============================================================================
60! Local variables:
61!==============================================================================
62integer :: i,j
63real,dimension(nlon,nlat) :: tmp ! reversed field
64
65      do i=1,nlat
66        do j=1,nlon
67          tmp(j,i)=newf(nlon+1-j,nlat+1-i)
68        enddo
69      enddo
70newf=tmp
71
72end subroutine reverse2d
73
74!===============================================================================
75
76subroutine reverse3d(nlon,nlat,nt,newf)
77!==============================================================================
78! Purpose:
79! reverse lat and lon on a 2D+time field
80!==============================================================================
81implicit none
82!==============================================================================
83! Arguments:
84!==============================================================================
85integer,intent(in) :: nlon ! longitude size
86integer,intent(in) :: nlat ! latitude size
87integer,intent(in) :: nt ! time size
88real,intent(inout),dimension(nlon,nlat,nt) :: newf ! field to be reversed
89
90!==============================================================================
91! Local variables:
92!==============================================================================
93integer :: i,j,l
94real,dimension(nlon,nlat,nt) :: tmp ! reversed field
95
96  do l=1,nt
97      do i=1,nlat
98        do j=1,nlon
99          tmp(j,i,l)=newf(nlon+1-j,nlat+1-i,l)
100        enddo
101      enddo
102  enddo
103newf=tmp
104
105end subroutine reverse3d
106
107!===============================================================================
108
109subroutine reverselev(np,newf)
110!==============================================================================
111! Purpose:
112! reverse vertical pressure axis
113!==============================================================================
114implicit none
115!==============================================================================
116! Arguments:
117!==============================================================================
118integer,intent(in) :: np   ! vertical size
119real,intent(inout),dimension(np) :: newf ! field to be reversed
120
121!==============================================================================
122! Local variables:
123!==============================================================================
124integer :: k
125real,dimension(np) :: tmp ! reversed field
126
127    do k=1,np
128          tmp(k)=newf(np+1-k)
129    enddo
130newf=tmp
131
132end subroutine reverselev
Note: See TracBrowser for help on using the repository browser.