/[lmdze]/trunk/filtrez/filtreg_scal.f
ViewVC logotype

Contents of /trunk/filtrez/filtreg_scal.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 140 - (show annotations)
Fri Jun 5 18:58:06 2015 UTC (8 years, 11 months ago) by guez
Original Path: trunk/Sources/filtrez/filtreg_scal.f
File size: 1621 byte(s)
Changed unit of variables lat_min_guide and lat_max_guide from module
conf_guide_m from degrees to rad. Then we do not have to convert the
whole array rlat from rad to degrees in SUBROUTINE tau2alpha.

Removed some useless computations in inigeom.

Removed module coefils. Moved variables sddv, unsddv, sddu, unsddu,
eignfnu, eignfnv of module coefils to module inifgn_m. Downgraded
variables coefilu, coefilu2, coefilv, coefilv2, modfrstu, modfrstv of
module coefils to local variables of SUBROUTINE inifilr.

Write and read a 3-dimensional variable Tsoil in restartphy.nc and
startphy.nc instead of multiple variables for the different
subs-urfaces and soil layers. This does not allow any longer to
provide only the surface value in startphy.nc and spread it to other
layers. Instead, if necessary, pre-process the file startphy.nc to
spread the surface value.

1 module filtreg_scal_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE filtreg_scal(champ, direct, intensive)
8
9 ! From filtrez/filtreg.F, version 1.1.1.1, 2004/05/19 12:53:09
10 ! Author: P. Le Van
11 ! Objet : filtre matriciel longitudinal, avec les matrices pr\'ecalcul\'ees
12 ! pour l'op\'erateur filtre.
13
14 USE dimens_m, ONLY: iim, jjm
15 use filtreg_hemisph_m, only: filtreg_hemisph
16 USE inifgn_m, ONLY: sddv, unsddv
17 use inifilr_m, only: jfiltnu, jfiltsu, matriceun, matriceus, matrinvn, &
18 matrinvs
19 use nr_util, only: assert
20
21 REAL, intent(inout):: champ(:, :, :) ! (iim + 1, jjm + 1, :)
22 ! en entr\'ee : champ \`a filtrer, en sortie : champ filtr\'e
23
24 logical, intent(in):: direct ! filtre direct ou inverse
25
26 logical, intent(in):: intensive
27 ! champ intensif ou extensif (pond\'er\'e par les aires)
28
29 ! Local:
30 REAL sdd1(iim), sdd2(iim)
31
32 !-----------------------------------------------------------
33
34 call assert(size(champ, 1) == iim + 1, "filtreg_scal iim + 1")
35 call assert(size(champ, 2) == jjm + 1, "filtreg_scal jjm + 1")
36
37 IF (intensive) THEN
38 sdd1 = sddv
39 sdd2 = unsddv
40 ELSE
41 sdd1 = unsddv
42 sdd2 = sddv
43 END IF
44
45 if (direct) then
46 call filtreg_hemisph(champ(:, 2:jfiltnu, :), sdd1, sdd2, matriceun)
47 call filtreg_hemisph(champ(:, jfiltsu:jjm, :), sdd1, sdd2, matriceus)
48 else
49 call filtreg_hemisph(champ(:, 2:jfiltnu, :), sdd1, sdd2, - matrinvn)
50 call filtreg_hemisph(champ(:, jfiltsu:jjm, :), sdd1, sdd2, - matrinvs)
51 end if
52
53 END SUBROUTINE filtreg_scal
54
55 end module filtreg_scal_m

  ViewVC Help
Powered by ViewVC 1.1.21