LMDZ
swuvo3.F90
Go to the documentation of this file.
1 SUBROUTINE swuvo3 &
2  & ( kidia,kfdia,klon,knu,kabs,&
3  & pu, ptr &
4  & )
5 
6 !**** *SWUVO3* - COMPUTES THE SHORTWAVE TRANSMISSION FUNCTIONS
7 
8 ! PURPOSE.
9 ! --------
10 ! THIS ROUTINE COMPUTES THE TRANSMISSION FUNCTIONS FOR OZONE
11 ! IN THE UV and VISIBLE SPECTRAL INTERVALS.
12 
13 !** INTERFACE.
14 ! ----------
15 ! *SWUVO3* IS CALLED FROM *SW1S*.
16 
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! KNU : ; INDEX OF THE SPECTRAL INTERVAL
20 ! KABS : ; NUMBER OF ABSORBERS
21 ! PU : (KLON,KABS) ; ABSORBER AMOUNT
22 ! ==== OUTPUTS ===
23 ! PTR : (KLON,KABS) ; TRANSMISSION FUNCTION
24 
25 ! IMPLICIT ARGUMENTS : NONE
26 ! --------------------
27 
28 ! METHOD.
29 ! -------
30 
31 ! TRANSMISSION FUNCTION ARE COMPUTED USING SUMS OF EXPONENTIALS
32 
33 ! EXTERNALS.
34 ! ----------
35 
36 ! NONE
37 
38 ! REFERENCE.
39 ! ----------
40 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
41 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
42 
43 ! AUTHOR.
44 ! -------
45 ! JEAN-JACQUES MORCRETTE *ECMWF*
46 
47 ! MODIFICATIONS.
48 ! --------------
49 ! ORIGINAL : 00-12-18
50 ! Modified J. HAGUE 03-01-03 MASS Vector Functions
51 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
52 
53 !-----------------------------------------------------------------------
54 
55 USE parkind1 ,ONLY : jpim ,jprb
56 USE yomhook ,ONLY : lhook, dr_hook
57 
58 USE yoesw , ONLY : nexpo3, rexpo3
59 USE yomjfh , ONLY : n_vmass
61 
62 IMPLICIT NONE
63 
64 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
65 INTEGER(KIND=JPIM),INTENT(IN) :: KABS
66 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
67 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
68 INTEGER(KIND=JPIM),INTENT(IN) :: KNU
69 REAL(KIND=JPRB) ,INTENT(IN) :: PU(klon,kabs)
70 REAL(KIND=JPRB) ,INTENT(OUT) :: PTR(klon,kabs)
71 !-----------------------------------------------------------------------
72 
73 !* 0.1 ARGUMENTS
74 ! ---------
75 
76 !-----------------------------------------------------------------------
77 
78 ! ------------
79 
80 REAL(KIND=JPRB) :: ZU(klon)
81 REAL(KIND=JPRB) :: ZTMP1(kfdia-kidia+1+n_vmass)
82 REAL(KIND=JPRB) :: ZTMP2(kfdia-kidia+1+n_vmass)
83 
84 INTEGER(KIND=JPIM) :: JA, JL, IEXP, JX, JLEN
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
86 LOGICAL LLDEBUG
87 
88 IF (lhook) CALL dr_hook('SWUVO3',0,zhook_handle)
89 iexp=nexpo3(knu)
90 lldebug=.false.
91 
92 !print *,'Dans SWUVO3, N_VMASS= ',N_VMASS
93 IF(n_vmass > 0) THEN
94  jlen=kfdia-kidia+n_vmass-mod(kfdia-kidia,n_vmass)
95  IF(kfdia-kidia+1 /= jlen) THEN
96  ztmp1(kfdia-kidia+2:jlen) = 0.0_jprb
97  ENDIF
98 ENDIF
99 
100 DO ja = 1,kabs
101  DO jl=kidia,kfdia
102  ptr(jl,ja)=0.0_jprb
103  ENDDO
104 
105 ! Ce qui concerne N_VMASS commente par MPL 20.11.08
106 ! IF(N_VMASS <= 0) THEN ! Do not use Vector Mass
107 
108 ! WRITE(*,'("---> Dans SWUVO3 ")')
109  DO jx=1,iexp
110  DO jl = kidia,kfdia
111  zu(jl) = pu(jl,ja)
112  ptr(jl,ja) = ptr(jl,ja)+rexpo3(knu,1,jx)*exp(-rexpo3(knu,2,jx)*zu(jl))
113 ! WRITE(*,'(" PTR ",E12.5)') (PTR(JL,JA))
114 ! WRITE(*,'("REXPO3-1 ",E12.5)') (REXPO3(KNU,1,JX))
115 ! WRITE(*,'("REXPO3-2 ",E12.5)') (REXPO3(KNU,2,JX))
116 ! WRITE(*,'("ZU ",E12.5)') (ZU(JL))
117 ! WRITE(*,'("KNU KABS IEXP ",3I6)') KNU,KABS,IEXP
118  ENDDO
119  ENDDO
120 
121 
122 ! ELSE ! Use Vector MASS
123 
124 ! DO JX=1,IEXP
125 ! DO JL = KIDIA,KFDIA
126 ! ZTMP1(JL-KIDIA+1)=-REXPO3(KNU,2,JX)*PU(JL,JA)
127 ! ENDDO
128 
129 ! CALL VEXP(ZTMP2,ZTMP1,JLEN)
130 
131 ! DO JL = KIDIA,KFDIA
132 ! PTR(JL,JA) = PTR(JL,JA)+REXPO3(KNU,1,JX)*ZTMP2(JL-KIDIA+1)
133 ! ENDDO
134 ! ENDDO
135 
136 ! ENDIF
137 
138 ENDDO
139 
140 IF(lldebug) THEN
141  call writefield_phy("swuvo3_pu",pu,kabs)
142  call writefield_phy("swuvo3_ptr",ptr,kabs)
143 ENDIF
144 
145 IF (lhook) CALL dr_hook('SWUVO3',1,zhook_handle)
146 END SUBROUTINE swuvo3
Definition: yoesw.F90:1
integer(kind=jpim) n_vmass
Definition: yomjfh.F90:11
real(kind=jprb), dimension(6, 2, 7) rexpo3
Definition: yoesw.F90:29
integer(kind=jpim), dimension(6) nexpo3
Definition: yoesw.F90:30
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
integer, save kfdia
Definition: dimphy.F90:5
integer, parameter jprb
Definition: parkind1.F90:31
subroutine swuvo3(KIDIA, KFDIA, KLON, KNU, KABS, PU, PTR)
Definition: swuvo3.F90:5
logical lhook
Definition: yomhook.F90:12
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
subroutine writefield_phy(name, Field, ll)
integer, parameter jpim
Definition: parkind1.F90:13
Definition: yomjfh.F90:1