SURFEX v8.1
General documentation of Surfex
fais2f.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe FA
3 SUBROUTINE fais2f_fort &
4 & (fa, krep, krang )
5 USE fa_mod, ONLY : fa_com, jpniil
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Ce sous-programme initialise un tableau "reference" de
12 ! l'en-tete GRIB, section 2.
13 ! (routine appelee une seule fois pour un fichier Aladin donne)
14 !**
15 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
16 ! KRANG (Entree) ==> Rang de l'unite logique;
17 !*
18 !
19 !
20 !
21 TYPE(fa_com) :: FA
22 INTEGER (KIND=JPLIKB) KREP, KRANG
23 !
24 INTEGER (KIND=JPLIKB) IRANGC, JM, JMAX, ILOW
25 INTEGER (KIND=JPLIKB) IADD, INUMER, INIMES
26 !
27 CHARACTER(LEN=FA%JPLMES) CLMESS
28 CHARACTER(LEN=FA%JPLSPX) CLNSPR
29 LOGICAL LLFATA
30 
31 !**
32 ! 0. - INITIALISATIONS ET CONTROLES
33 !-----------------------------------------------------------------------
34 !
35 REAL(KIND=JPRB) :: ZHOOK_HANDLE
36 IF (lhook) CALL dr_hook('FAIS2F_MT',0,zhook_handle)
37 krep=0
38 IF (krang.LE.0.OR.krang.GT.fa%JPNXFA) THEN
39  krep=-66
40  GOTO 1001
41 ENDIF
42 irangc=fa%FICHIER(krang)%NUCADR
43 !**
44 ! 1. - INITIALISATION DU TABLEAU FA%NSC2ALF
45 !-----------------------------------------------------------------------
46 !
47 ! Les valeurs de ce tableau representent les nb de pts
48 ! le long de chaque "parallele" (ici, le nb de coeff spectraux
49 ! pour un meme m (nb d'onde zonal), excepte le triangle et les axes non
50 ! compactes). Il s'agit en effet de deguiser un champ spectral
51 ! Aladin en champ pts de grille (grille lat-lon) pour profiter
52 ! du compactage, voire de la compression, GRIBEX.
53 ! Le rangt des CSP est fait verticalement (par colonne de m=cst)
54 ! et pour chaque couple (m,n) correspond 4 CSP.
55 !
56 jmax = (fa%CADRE(irangc)%NOZPAR(6)-fa%CADRE(irangc)%NOZPAR(5)+1)/4 -1
57 DO jm=1,jmax
58  ilow=2+2*jm+1
59  iadd=4* max(fa%FICHIER(krang)%NSTROF+1-jm,1_jplikb )
60 !
61  fa%FICHIER(krang)%NSC2ALF(jm)=fa%CADRE(irangc)%NOMPAR(ilow+1)- &
62 & (fa%CADRE(irangc)%NOMPAR(ilow)+iadd)+1
63 ENDDO
64 !**
65 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
66 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
67 !-----------------------------------------------------------------------
68 !
69 1001 CONTINUE
70 llfata=llmoer(krep,krang)
71 !
72 IF (fa%LFAMOP.OR.llfata) THEN
73  inimes=2
74  clnspr='FAIS2F'
75  inumer=jpniil
76 !
77  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KRANG='',I4)') &
78 & krep, krang
79  CALL faipar_fort &
80 & (fa, inumer,inimes,krep,.false.,clmess, &
81 & clnspr,clnspr,.false.)
82 ENDIF
83 !
84 IF (lhook) CALL dr_hook('FAIS2F_MT',1,zhook_handle)
85 
86 CONTAINS
87 
88 #include "facom2.llmoer.h"
89 
90 END SUBROUTINE fais2f_fort
91 
92 
93 
94 ! Oct-2012 P. Marguinaud 64b LFI
95 SUBROUTINE fais2f64 &
96 & (krep, krang)
97 USE fa_mod, ONLY : fa => fa_com_default, &
100 USE lfi_precision
101 IMPLICIT NONE
102 ! Arguments
103 INTEGER (KIND=JPLIKB) KREP ! OUT
104 INTEGER (KIND=JPLIKB) KRANG ! IN
105 
106 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
107 
108 CALL fais2f_fort &
109 & (fa, krep, krang)
110 
111 END SUBROUTINE fais2f64
112 
113 SUBROUTINE fais2f &
114 & (krep, krang)
115 USE fa_mod, ONLY : fa => fa_com_default, &
118 USE lfi_precision
119 IMPLICIT NONE
120 ! Arguments
121 INTEGER (KIND=JPLIKM) KREP ! OUT
122 INTEGER (KIND=JPLIKM) KRANG ! IN
123 
124 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
125 
126 CALL fais2f_mt &
127 & (fa, krep, krang)
128 
129 END SUBROUTINE fais2f
130 
131 SUBROUTINE fais2f_mt &
132 & (fa, krep, krang)
133 USE fa_mod, ONLY : fa_com
134 USE lfi_precision
135 IMPLICIT NONE
136 ! Arguments
137 type(fa_com) fa ! INOUT
138 INTEGER (KIND=JPLIKM) KREP ! OUT
139 INTEGER (KIND=JPLIKM) KRANG ! IN
140 ! Local integers
141 INTEGER (KIND=JPLIKB) IREP ! OUT
142 INTEGER (KIND=JPLIKB) IRANG ! IN
143 ! Convert arguments
144 
145 irang = int( krang, jplikb)
146 
147 CALL fais2f_fort &
148 & (fa, irep, irang)
149 
150 krep = int( irep, jplikm)
151 
152 END SUBROUTINE fais2f_mt
153 
154 !INTF KREP OUT
155 !INTF KRANG IN
integer, parameter jplikb
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine new_fa_default()
Definition: fa_mod.F90:649
subroutine fais2f_fort(FA, KREP, KRANG)
Definition: fais2f.F90:5
Definition: fa_mod.F90:1
integer, parameter jprb
Definition: parkind1.F90:32
subroutine fais2f_mt(FA, KREP, KRANG)
Definition: fais2f.F90:133
logical lhook
Definition: yomhook.F90:15
subroutine fais2f64(KREP, KRANG)
Definition: fais2f.F90:97
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine fais2f(KREP, KRANG)
Definition: fais2f.F90:115
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31