FV3 Bundle
ODZeeman_Predictor.f90
Go to the documentation of this file.
1 !
2 ! ODZeeman_Predictor
3 !
4 ! Module containing routines to compute the predictors for calculations
5 ! gaseous absorption affected by Zeeman spilitting in
6 ! the Optical Depth Pressure Space (ODPS).
7 !
8 !
9 ! CREATION HISTORY:
10 ! Written by: Yong Han, JCSDA, NOAA/NESDIS 20-Sep-2008
11 !
12 
14 
15  ! Environment setup
16  ! -----------------
17  ! Module use
18  USE type_kinds, ONLY: fp
21  USE odps_define, ONLY: odps_type
22 
23  ! Disable implicit typing
24  IMPLICIT NONE
25 
26  ! ------------
27  ! Visibilities
28  ! ------------
29  ! Everything private by default
30  PRIVATE
31  ! Public routines
38 
39  ! Public parameters
40  PUBLIC :: n_zcomponents
41  PUBLIC :: n_zabsorbers
42  PUBLIC :: max_n_predictors_zssmis
43  PUBLIC :: max_n_predictors_zamsua
44  PUBLIC :: zssmis_channelmap
45  PUBLIC :: zamsua_channelmap
46  PUBLIC :: odps_gindex_zssmis
47  PUBLIC :: odps_gindex_zamsua
48 
49  ! ----------
50  ! Parameters
51  ! ----------
52  REAL(fp), PARAMETER :: zero = 0.0_fp, one = 1.0_fp, two = 2.0_fp
53 
54  INTEGER, PARAMETER :: n_zcomponents = 1
55  ! set this variable to 1 although it should be 1 to consistant with the ODPS structure (for
56  ! Zeeman applications only O2 need to be considered, which will be include as a fixed gas, decribed
57  ! by pressure and temperature.
58  INTEGER, PARAMETER :: n_zabsorbers = 1
59 
60  !----------------------------------------------------------------
61  ! ZSSMIS parameters (SSMIS channels 19 - 22)
62  !----------------------------------------------------------------
63  INTEGER, PARAMETER :: odps_gindex_zssmis = 4 ! ODPS group index
64  INTEGER, PARAMETER :: max_n_predictors_zssmis = 18
65  ! Global to ZSSMIS channel index mapping
66  INTEGER, PARAMETER :: n_channels_ssmis = 24
67  INTEGER, PARAMETER :: zssmis_channelmap(n_channels_ssmis) = (/&
68  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
69  0, 0, 0, 0, 0, 0, 0, 0, 1, 2, &
70  3, 4, 0, 0 /)
71 
72 
73  !----------------------------------------------------------------
74  ! ZAMSUA parameters (AMSUA channel 14)
75  !----------------------------------------------------------------
76  INTEGER, PARAMETER :: max_n_predictors_zamsua = 7
77  INTEGER, PARAMETER :: odps_gindex_zamsua = 5 ! ODPS group index
78  ! Global to ZAMSUA channel index mapping
79  INTEGER, PARAMETER :: n_channels_amsua = 15
80  INTEGER, PARAMETER :: zamsua_channelmap(n_channels_amsua) = (/&
81  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
82  0, 0, 0, 1, 0/)
83 
84 CONTAINS
85 
86 !------------------------------------------------------------------------------
87 !
88 ! NAME:
89 ! Compute_Predictors_zssmis
90 !
91 ! PURPOSE:
92 ! Subroutine to compute predictors for the ZSSMIS sensor (a virtual sensor
93 ! created for SSMIS Zeeman channels 19, 20, 21 and 22
94 !
95 ! CALLING SEQUENCE:
96 ! CALL Compute_Predictors_zssmis(Temperature, &
97 ! Be, &
98 ! CosBK, &
99 ! Doppler_Shift, &
100 ! Secang, &
101 ! Predictor )
102 !
103 ! INPUT ARGUMENTS:
104 !
105 ! Temperature: Temperature profile
106 ! UNITS: K
107 ! TYPE: REAL(fp)
108 ! DIMENSION: Rank-1(n_Layers) array
109 ! ATTRIBUTES: INTENT(IN)
110 !
111 ! Be : Earth magnetic filed strength
112 ! UNITS: Guass (range 0.2 - 0.7)
113 ! TYPE: REAL(fp)
114 ! DIMENSION: scalar
115 ! ATTRIBUTES: INTENT(IN)
116 !
117 ! CosBK : Cosine of the angle between the Earth magnetic
118 ! field and the electromagnetic wave propagation
119 ! direction
120 ! UNITS: N/A
121 ! TYPE: REAL(fp)
122 ! DIMENSION: Scalar
123 ! ATTRIBUTES: INTENT(IN)
124 !
125 ! Doppler_Shift : Doppler shift due Earth ratation, positive when
126 ! the emitter moves towards the sensor
127 ! UNITS: KHz
128 ! TYPE: REAL(fp)
129 ! DIMENSION: Scalar
130 ! ATTRIBUTES: INTENT(IN)
131 !
132 ! Secang : Secant of the zenith angle profile
133 ! UNITS: N/A
134 ! TYPE: REAL(fp)
135 ! DIMENSION: Rank-1(n_Layers) array
136 ! ATTRIBUTES: INTENT(IN)
137 !
138 ! OUTPUT ARGUMENTS:
139 ! Predictor: Predictor structure
140 ! UNITS: N/A
141 ! TYPE: TYPE(ODPS_Predictor_type)
142 ! DIMENSION: Scalar
143 ! ATTRIBUTES: INTENT(IN OUT)
144 !
145 !------------------------------------------------------------------------------
146 
147  SUBROUTINE compute_predictors_zssmis(Temperature, &
148  Be, &
149  CosBK, &
150  Doppler_Shift, &
151  Secang, &
152  Predictor )
153  REAL(fp), INTENT( IN ) :: temperature(:)
154  REAL(fp), INTENT( IN ) :: be
155  REAL(fp), INTENT( IN ) :: cosbk
156  REAL(fp), INTENT( IN ) :: doppler_shift
157  REAL(fp), INTENT( IN ) :: secang(:)
158  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor
159 
160  ! LOCAL
161  REAL(fp) :: be2, be3, oneoverbe, oneoverbe2, cosbk2, oneovert
162  INTEGER :: k
163 
164  be2 = be * be
165  be3 = be2 * be
166  oneoverbe = one / be
167  oneoverbe2 = oneoverbe * oneoverbe
168  cosbk2 = cosbk * cosbk
169 
170  DO k = 1, predictor%n_Layers
171  ! Predictors associated Temperature
172  oneovert = 300.0_fp / temperature(k)
173  predictor%X(k, 1, 1) = oneovert ! 1/T
174  predictor%X(k, 2, 1) = oneovert * cosbk2 ! COS(BK_ang)**2 / T
175  predictor%X(k, 3, 1) = oneovert / be ! 1 / (T*Be)
176  predictor%X(k, 4, 1) = oneovert * cosbk / be ! COS(BK_ang) / (T*Be)
177  predictor%X(k, 5, 1) = oneovert * cosbk / be2 ! COS(BK_ang) / (T*Be**2)
178  END DO
179 
180  ! Constant predictor
181  predictor%X(:, 6, 1) = one ! 1 - constant term
182  predictor%X(:, 7, 1) = cosbk ! COS(BK_ang)
183  predictor%X(:, 8, 1) = cosbk2 ! COS(BK_ang)**2
184  predictor%X(:, 9, 1) = oneoverbe ! 1 / Be
185  predictor%X(:, 10, 1) = oneoverbe2 ! 1 / Be**2
186  predictor%X(:, 11, 1) = oneoverbe2 * oneoverbe ! 1 / Be^3
187  predictor%X(:, 12, 1) = cosbk * be2 ! COS(BK_ang) * Be**2
188  predictor%X(:, 13, 1) = cosbk2 * be2 ! (COS(BK_ang) * Be)**2
189  predictor%X(:, 14, 1) = cosbk * be3 ! COS(BK_ang) * Be**3
190  predictor%X(:, 15, 1) = be ! Be
191  predictor%X(:, 16, 1) = be3 ! Be**3
192  predictor%X(:, 17, 1) = cosbk * be ! COS(BK_ang)*Be
193  predictor%X(:, 18, 1) = cosbk2 * be ! COS(BK_ang)**2*Be
194 
195  predictor%n_CP(1) = max_n_predictors_zssmis
196 
197  ! pass Doppler shift and Secant angle to Predicotr structre
198  predictor%u = doppler_shift
199  predictor%Secant_Zenith = secang
200 
201  END SUBROUTINE compute_predictors_zssmis
202 
203 !------------------------------------------------------------------------------
204 !
205 ! NAME:
206 ! Compute_Predictors_zssmis_TL
207 !
208 ! PURPOSE:
209 ! Subroutine to compute TL predictors for the ZSSMIS sensor (a virtual sensor
210 ! created for SSMIS Zeeman channels 19, 20, 21 and 22)
211 !
212 ! CALLING SEQUENCE:
213 !
214 ! CALL Compute_Predictors_zssmis_TL(Temperature, &
215 ! Be, &
216 ! CosBK, &
217 ! Temperature_TL,&
218 ! Predictor_TL )
219 ! INPUT ARGUMENTS:
220 !
221 ! Temperature: Temperature profile
222 ! UNITS: K
223 ! TYPE: REAL(fp)
224 ! DIMENSION: Rank-1(n_Layers) array
225 ! ATTRIBUTES: INTENT(IN)
226 !
227 ! Be : Earth magnetic filed strength
228 ! UNITS: Guass (range 0.2 - 0.7)
229 ! TYPE: REAL(fp)
230 ! DIMENSION: scalar
231 ! ATTRIBUTES: INTENT(IN)
232 !
233 ! CosBK : Cosine of the angle between the Earth magnetic
234 ! field and the electromagnetic wave propagation
235 ! direction
236 ! UNITS: N/A
237 ! TYPE: REAL(fp)
238 ! DIMENSION: Scalar
239 ! ATTRIBUTES: INTENT(IN)
240 !
241 ! Temperature_TL: TL Temperature profile
242 ! UNITS: K
243 ! TYPE: REAL(fp)
244 ! DIMENSION: Rank-1(n_Layers) array
245 ! ATTRIBUTES: INTENT(IN)
246 !
247 ! OUTPUT ARGUMENTS:
248 ! Predictor_TL: TL Predictor structure
249 ! UNITS: N/A
250 ! TYPE: TYPE(ODPS_Predictor_type)
251 ! DIMENSION: Scalar
252 ! ATTRIBUTES: INTENT(IN OUT)
253 !
254 !------------------------------------------------------------------------------
255 
256  SUBROUTINE compute_predictors_zssmis_tl(Temperature, &
257  Be, &
258  CosBK, &
259  Temperature_TL,&
260  Predictor_TL )
261  REAL(fp), INTENT( IN ) :: temperature(:)
262  REAL(fp), INTENT( IN ) :: be
263  REAL(fp), INTENT( IN ) :: cosbk
264  REAL(fp), INTENT( IN ) :: temperature_tl(:)
265  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor_tl
266 
267  ! LOCAL
268  REAL(fp) :: be2, cosbk2, oneovert, oneovert_tl
269  INTEGER :: k
270 
271  be2 = be * be
272  cosbk2 = cosbk * cosbk
273 
274  DO k = 1, predictor_tl%n_Layers
275  ! Predictors associated Temperature
276  oneovert = 300.0_fp / temperature(k)
277  oneovert_tl = -(oneovert / temperature(k))*temperature_tl(k)
278  predictor_tl%X(k, 1, 1) = oneovert_tl
279  predictor_tl%X(k, 2, 1) = oneovert_tl * cosbk2
280  predictor_tl%X(k, 3, 1) = oneovert_tl / be
281  predictor_tl%X(k, 4, 1) = oneovert_tl * cosbk / be
282  predictor_tl%X(k, 5, 1) = oneovert_tl * cosbk / be2
283  END DO
284 
285  ! Constant predictor
286  predictor_tl%X(:, 6:18, 1) = zero
287 
288  predictor_tl%n_CP(1) = max_n_predictors_zssmis
289 
290  END SUBROUTINE compute_predictors_zssmis_tl
291 
292 !------------------------------------------------------------------------------
293 !
294 ! NAME:
295 ! Compute_Predictors_zssmis_AD
296 !
297 ! PURPOSE:
298 ! Subroutine to compute AD predictors for the ZSSMIS sensor (a virtual sensor
299 ! created for SSMIS Zeeman channels 19, 20, 21 and 22)
300 !
301 ! CALLING SEQUENCE:
302 !
303 ! CALL Compute_Predictors_zssmis_AD(Temperature, &
304 ! Be, &
305 ! CosBK, &
306 ! Predictor_AD, &
307 ! Temperature_AD )
308 ! INPUT ARGUMENTS:
309 !
310 ! Temperature: Temperature profile
311 ! UNITS: K
312 ! TYPE: REAL(fp)
313 ! DIMENSION: Rank-1(n_Layers) array
314 ! ATTRIBUTES: INTENT(IN)
315 !
316 ! Be : Earth magnetic filed strength
317 ! UNITS: Guass (range 0.2 - 0.7)
318 ! TYPE: REAL(fp)
319 ! DIMENSION: scalar
320 ! ATTRIBUTES: INTENT(IN)
321 !
322 ! CosBK : Cosine of the angle between the Earth magnetic
323 ! field and the electromagnetic wave propagation
324 ! direction
325 ! UNITS: N/A
326 ! TYPE: REAL(fp)
327 ! DIMENSION: Scalar
328 ! ATTRIBUTES: INTENT(IN)
329 !
330 ! Predictor_AD: AD Predictor structure
331 ! UNITS: N/A
332 ! TYPE: TYPE(ODPS_Predictor_type)
333 ! DIMENSION: Scalar
334 ! ATTRIBUTES: INTENT(INOUT)
335 !
336 ! OUTPUT ARGUMENTS:
337 ! Temperature_AD: AD Temperature profile
338 ! UNITS: K
339 ! TYPE: REAL(fp)
340 ! DIMENSION: Rank-1(n_Layers) array
341 ! ATTRIBUTES: INTENT(INOUT)
342 !
343 !------------------------------------------------------------------------------
344  SUBROUTINE compute_predictors_zssmis_ad(Temperature, &
345  Be, &
346  CosBK, &
347  Predictor_AD, &
348  Temperature_AD )
349  REAL(fp), INTENT( IN ) :: temperature(:)
350  REAL(fp), INTENT( IN ) :: be
351  REAL(fp), INTENT( IN ) :: cosbk
352  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor_ad
353  REAL(fp), INTENT( INOUT ) :: temperature_ad(:)
354 
355  ! LOCAL
356  REAL(fp) :: be2, cosbk2, oneovert, oneovert_ad
357  INTEGER :: k
358 
359  be2 = be * be
360  cosbk2 = cosbk * cosbk
361 
362  DO k = 1, predictor_ad%n_Layers
363  ! Predictors associated Temperature
364  oneovert = 300.0_fp / temperature(k)
365 
366  oneovert_ad = predictor_ad%X(k, 1, 1) + &
367  predictor_ad%X(k, 2, 1)*cosbk2 + &
368  predictor_ad%X(k, 3, 1) / be + &
369  predictor_ad%X(k, 4, 1) * cosbk / be + &
370  predictor_ad%X(k, 5, 1) * cosbk / be2
371  temperature_ad(k) = temperature_ad(k) - &
372  (oneovert / temperature(k)) * oneovert_ad
373  END DO
374 
375  ! Constant predictor
376  predictor_ad%X(:, :, 1) = zero
377 
378  predictor_ad%n_CP(1) = max_n_predictors_zssmis
379 
380  END SUBROUTINE compute_predictors_zssmis_ad
381 
382 !------------------------------------------------------------------------------
383 !
384 ! NAME:
385 ! Compute_Predictors_zamsua
386 !
387 ! PURPOSE:
388 ! Subroutine to compute predictors for the ZAMSUA sensor (a virtual sensor
389 ! with AMSUA channel 14)
390 !
391 ! CALLING SEQUENCE:
392 ! CALL Compute_Predictors_zamsua(Temperature, &
393 ! Ref_Temperature, &
394 ! Be, &
395 ! CosBK, &
396 ! Secang, &
397 ! Predictor )
398 !
399 ! INPUT ARGUMENTS:
400 !
401 ! Temperature: Temperature profile
402 ! UNITS: K
403 ! TYPE: REAL(fp)
404 ! DIMENSION: Rank-1(n_Layers) array
405 ! ATTRIBUTES: INTENT(IN)
406 !
407 ! Ref_Temperature: Reference temperature profile
408 ! UNITS: K
409 ! TYPE: REAL(fp)
410 ! DIMENSION: Rank-1(n_Layers) array
411 ! ATTRIBUTES: INTENT(IN)
412 !
413 ! Be : Earth magnetic filed strength
414 ! UNITS: Guass (range 0.2 - 0.7)
415 ! TYPE: REAL(fp)
416 ! DIMENSION: scalar
417 ! ATTRIBUTES: INTENT(IN)
418 !
419 ! CosBK : Cosine of the angle between the Earth magnetic
420 ! field and the electromagnetic wave propagation
421 ! direction
422 ! UNITS: N/A
423 ! TYPE: REAL(fp)
424 ! DIMENSION: Scalar
425 ! ATTRIBUTES: INTENT(IN)
426 !
427 ! Secang : Secant of the zenith angle profile
428 ! UNITS: N/A
429 ! TYPE: REAL(fp)
430 ! DIMENSION: Rank-1(n_Layers) array
431 ! ATTRIBUTES: INTENT(IN)
432 !
433 ! OUTPUT ARGUMENTS:
434 ! Predictor: Predictor structure
435 ! UNITS: N/A
436 ! TYPE: TYPE(ODPS_Predictor_type)
437 ! DIMENSION: Scalar
438 ! ATTRIBUTES: INTENT(IN OUT)
439 !
440 !------------------------------------------------------------------------------
441 
442  SUBROUTINE compute_predictors_zamsua(Temperature, &
443  Ref_Temperature, &
444  Be, &
445  CosBK, &
446  Secang, &
447  Predictor )
448  REAL(fp), INTENT( IN ) :: temperature(:)
449  REAL(fp), INTENT( IN ) :: ref_temperature(:)
450  REAL(fp), INTENT( IN ) :: be
451  REAL(fp), INTENT( IN ) :: cosbk
452  REAL(fp), INTENT( IN ) :: secang(:)
453  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor
454 
455  ! LOCAL
456  REAL(fp) :: be3, cosbk2, cosbk2be2, tk
457  INTEGER :: k
458 
459  be3 = be*be*be
460  cosbk2 = cosbk*cosbk
461  cosbk2be2 = cosbk2*be*be
462 
463  DO k = 1, predictor%n_Layers
464  tk = temperature(k)/ref_temperature(k)
465  predictor%X(k, 1, 1) = secang(k)
466  predictor%X(k, 2, 1) = tk
467  predictor%X(k, 3, 1) = tk*tk
468  predictor%X(k, 4, 1) = cosbk2
469  predictor%X(k, 5, 1) = be*secang(k)
470  predictor%X(k, 6, 1) = be3
471  predictor%X(k, 7, 1) = cosbk2be2*secang(k)
472  END DO
473 
474 
475  predictor%n_CP(1) = max_n_predictors_zamsua
476 
477  predictor%Secant_Zenith = secang
478 
479  END SUBROUTINE compute_predictors_zamsua
480 
481 !------------------------------------------------------------------------------
482 !
483 ! NAME:
484 ! Compute_Predictors_zamsua_TL
485 !
486 ! PURPOSE:
487 ! Subroutine to compute TL predictors for the ZAMSUA sensor (a virtual sensor
488 ! with AMSUA channel 14)
489 !
490 ! CALLING SEQUENCE:
491 !
492 ! CALL Compute_Predictors_zamsua_TL(Temperature, &
493 ! Ref_Temperature, &
494 ! Temperature_TL,&
495 ! Predictor_TL )
496 ! INPUT ARGUMENTS:
497 !
498 ! Temperature: Temperature profile
499 ! UNITS: K
500 ! TYPE: REAL(fp)
501 ! DIMENSION: Rank-1(n_Layers) array
502 ! ATTRIBUTES: INTENT(IN)
503 !
504 ! RefTemperature: Reference temperature profile
505 ! UNITS: K
506 ! TYPE: REAL(fp)
507 ! DIMENSION: Rank-1(n_Layers) array
508 ! ATTRIBUTES: INTENT(IN)
509 !
510 ! Temperature_TL: TL Temperature profile
511 ! UNITS: K
512 ! TYPE: REAL(fp)
513 ! DIMENSION: Rank-1(n_Layers) array
514 ! ATTRIBUTES: INTENT(IN)
515 !
516 ! OUTPUT ARGUMENTS:
517 ! Predictor_TL: TL Predictor structure
518 ! UNITS: N/A
519 ! TYPE: TYPE(ODPS_Predictor_type)
520 ! DIMENSION: Scalar
521 ! ATTRIBUTES: INTENT(IN OUT)
522 !
523 !------------------------------------------------------------------------------
524 
525  SUBROUTINE compute_predictors_zamsua_tl(Temperature, &
526  Ref_Temperature, &
527  Temperature_TL, &
528  Predictor_TL )
529  REAL(fp), INTENT( IN ) :: temperature(:)
530  REAL(fp), INTENT( IN ) :: ref_temperature(:)
531  REAL(fp), INTENT( IN ) :: temperature_tl(:)
532  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor_tl
533 
534  ! LOCAL
535  REAL(fp) :: tk, tk_tl
536  INTEGER :: k
537 
538 
539  DO k = 1, predictor_tl%n_Layers
540  tk = temperature(k)/ref_temperature(k)
541  tk_tl = temperature_tl(k)/ref_temperature(k)
542  predictor_tl%X(k, 1, 1) = zero
543  predictor_tl%X(k, 2, 1) = tk_tl
544  predictor_tl%X(k, 3, 1) = two*tk*tk_tl
545  predictor_tl%X(k, 4, 1) = zero
546  predictor_tl%X(k, 5, 1) = zero
547  predictor_tl%X(k, 6, 1) = zero
548  predictor_tl%X(k, 7, 1) = zero
549  END DO
550 
551  predictor_tl%n_CP(1) = max_n_predictors_zamsua
552 
553  END SUBROUTINE compute_predictors_zamsua_tl
554 
555 !------------------------------------------------------------------------------
556 !
557 ! NAME:
558 ! Compute_Predictors_zamsua_AD
559 !
560 ! PURPOSE:
561 ! Subroutine to compute AD predictors for the ZAMSUA sensor (a virtual sensor
562 ! with AMSUA channel 14)
563 !
564 ! CALLING SEQUENCE:
565 !
566 ! CALL Compute_Predictors_zamsua_AD(Temperature, &
567 ! Ref_Temperature, &
568 ! Predictor_AD, &
569 ! Temperature_AD )
570 ! INPUT ARGUMENTS:
571 !
572 ! Temperature: Temperature profile
573 ! UNITS: K
574 ! TYPE: REAL(fp)
575 ! DIMENSION: Rank-1(n_Layers) array
576 ! ATTRIBUTES: INTENT(IN)
577 !
578 ! Ref_Temperature: Reference temperature profile
579 ! UNITS: K
580 ! TYPE: REAL(fp)
581 ! DIMENSION: Rank-1(n_Layers) array
582 ! ATTRIBUTES: INTENT(IN)
583 !
584 ! Predictor_AD: AD Predictor structure
585 ! UNITS: N/A
586 ! TYPE: TYPE(ODPS_Predictor_type)
587 ! DIMENSION: Scalar
588 ! ATTRIBUTES: INTENT(INOUT)
589 !
590 ! OUTPUT ARGUMENTS:
591 ! Temperature_AD: AD Temperature profile
592 ! UNITS: K
593 ! TYPE: REAL(fp)
594 ! DIMENSION: Rank-1(n_Layers) array
595 ! ATTRIBUTES: INTENT(INOUT)
596 !
597 !------------------------------------------------------------------------------
598  SUBROUTINE compute_predictors_zamsua_ad(Temperature, &
599  Ref_Temperature,&
600  Predictor_AD, &
601  Temperature_AD )
602  REAL(fp), INTENT( IN ) :: temperature(:)
603  REAL(fp), INTENT( IN ) :: ref_temperature(:)
604  TYPE(odps_predictor_type), INTENT( INOUT ) :: predictor_ad
605  REAL(fp), INTENT( INOUT ) :: temperature_ad(:)
606 
607  ! LOCAL
608  REAL(fp) :: tk, tk_ad
609  INTEGER :: k
610 
611  DO k = predictor_ad%n_Layers, 1, -1
612  tk = temperature(k)/ref_temperature(k)
613 
614  tk_ad = two*tk*predictor_ad%X(k, 3, 1)
615  tk_ad = tk_ad + predictor_ad%X(k, 2, 1)
616  temperature_ad(k) = temperature_ad(k) + tk_ad/ref_temperature(k)
617  predictor_ad%X(k, :, 1) = zero
618  END DO
619 
620  predictor_ad%n_CP(1) = max_n_predictors_zamsua
621 
622  END SUBROUTINE compute_predictors_zamsua_ad
623 
624 END MODULE odzeeman_predictor
subroutine, public compute_predictors_zssmis_ad(Temperature, Be, CosBK, Predictor_AD, Temperature_AD)
integer, parameter, public failure
integer, parameter, public odps_gindex_zssmis
subroutine, public compute_predictors_zamsua_ad(Temperature, Ref_Temperature, Predictor_AD, Temperature_AD)
real(fp), parameter, public zero
integer, dimension(n_channels_amsua), parameter, public zamsua_channelmap
integer, parameter, public max_n_predictors_zamsua
integer, parameter n_channels_amsua
integer, parameter, public fp
Definition: Type_Kinds.f90:124
subroutine, public compute_predictors_zamsua_tl(Temperature, Ref_Temperature, Temperature_TL, Predictor_TL)
subroutine, public compute_predictors_zssmis(Temperature, Be, CosBK, Doppler_Shift, Secang, Predictor)
integer, parameter, public max_n_predictors_zssmis
integer, parameter, public n_zcomponents
integer, dimension(n_channels_ssmis), parameter, public zssmis_channelmap
integer, parameter n_channels_ssmis
real(fp), parameter, public one
subroutine, public compute_predictors_zssmis_tl(Temperature, Be, CosBK, Temperature_TL, Predictor_TL)
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
real(fp), parameter, public two
integer, parameter, public n_zabsorbers
integer, parameter, public odps_gindex_zamsua
subroutine, public compute_predictors_zamsua(Temperature, Ref_Temperature, Be, CosBK, Secang, Predictor)
integer, parameter, public success