SURFEX v8.1
General documentation of Surfex
facage.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 facage_fort &
4 & (fa, cdnomc, ldgard )
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 ! Sous-programme servant a redefinir l'option de conservation
12 ! d'un cadre preexistant ( CAdre a Garder Eventuellement... )
13 !**
14 ! Arguments : CDNOMC ==> Nom symbolique du cadre;
15 ! (tous d'Entree) LDGARD ==> Vrai si le cadre doit etre conserve meme
16 ! apres la fermeture du dernier fichier
17 ! qui s'y rattache.
18 !
19 !
20 !
21 TYPE(fa_com) :: FA
22 INTEGER (KIND=JPLIKB) ILCDNO, ILNOMC, J, IRANGC
23 INTEGER (KIND=JPLIKB) IREP, INIMES, INUMER
24 !
25 LOGICAL LLVERG, LDGARD
26 !
27 CHARACTER CDNOMC*(*)
28 CHARACTER(LEN=FA%JPXNOM) CLACTI
29 CHARACTER(LEN=FA%JPLMES) CLMESS
30 CHARACTER(LEN=FA%JPLSPX) CLNSPR
31 LOGICAL LLFATA
32 
33 !
34 !
35 !**
36 ! 0. - SI PREMIERE UTILISATION, APPEL AU SOUS-PROGRAMME "FARINE".
37 !-----------------------------------------------------------------------
38 !
39 REAL(KIND=JPRB) :: ZHOOK_HANDLE
40 IF (lhook) CALL dr_hook('FACAGE_MT',0,zhook_handle)
41 clacti=''
42 IF (fa%FACAGE_LLPREA) THEN
43  CALL farine_fort &
44 & (fa, 2_jplikb )
45  fa%FACAGE_LLPREA=.false.
46 ENDIF
47 !**
48 ! 1. - CONTROLE DE L'ARGUMENT "CDNOMC".
49 !-----------------------------------------------------------------------
50 !
51 llverg=.false.
52 ilcdno=int(len(cdnomc), jplikb)
53 ilnomc=1
54 !
55 IF (ilcdno.LE.0) THEN
56  irep=-65
57  GOTO 1001
58 ELSEIF (cdnomc.EQ.' ') THEN
59  irep=-68
60  GOTO 1001
61 ENDIF
62 !
63 DO j=ilcdno,1,-1
64 !
65 IF (cdnomc(j:j).NE.' ') THEN
66  ilnomc=j
67  GOTO 102
68 ENDIF
69 !
70 ENDDO
71 !
72 102 CONTINUE
73 !
74 IF (ilnomc.GT.fa%NCPCAD) THEN
75  irep=-65
76  GOTO 1001
77 ENDIF
78 !**
79 ! 2. - RECHERCHE DU CADRE DANS LES TABLES.
80 !-----------------------------------------------------------------------
81 !
82 ! Verrouillage global prealable, si necessaire.
83 !
84 IF (fa%LFAMUL) CALL lfiver_fort &
85 & (fa%LFI, fa%VRGLAS,'ON')
86 llverg=fa%LFAMUL
87 !
88 CALL fanuca_fort &
89 & (fa, cdnomc,irangc,.false.)
90 !
91 IF (irangc.EQ.0) THEN
92  irep=-51
93  GOTO 1001
94 ENDIF
95 !**
96 ! 3. - MISE A JOUR DU NIVEAU DE CONSERVATION.
97 !-----------------------------------------------------------------------
98 !
99 IF (ldgard) THEN
100  fa%CADRE(irangc)%NGARDE=2
101 ELSE
102  fa%CADRE(irangc)%NGARDE=0
103 ENDIF
104 !
105 irep=0
106 !**
107 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
108 ! VIA LE sous-programme "FAIPAR" .
109 !-----------------------------------------------------------------------
110 !
111 1001 CONTINUE
112 !
113 ! Deverrouillage global eventuel.
114 !
115 IF (llverg) CALL lfiver_fort &
116 & (fa%LFI, fa%VRGLAS,'OFF')
117 !
118 llfata=irep.NE.0.AND.fa%NRFAGA.NE.2
119 !
120 IF (llfata.OR.fa%NIMSGA.EQ.2) THEN
121  inimes=2
122  clnspr='FACAGE'
123 !
124  IF (irep.EQ.-65.AND.ilcdno.LE.0) THEN
125  ilnomc=8
126  clacti(1:ilnomc)=fa%CHAINC(:ilnomc)
127  ELSE
128  ilnomc=min(int(len(clacti), jplikb),ilnomc)
129  clacti(1:ilnomc)=cdnomc(1:ilnomc)
130  ENDIF
131 !
132  ilnomc=min(ilnomc,fa%NCPCAD)
133  WRITE (unit=clmess, &
134 & fmt='(''CDNOMC= '''''',A,'''''', LDGARD= '', &
135 & L1,'', CODE INTERNE='',I4)') &
136 & clacti(1:ilnomc),ldgard,irep
137  inumer=jpniil
138  CALL faipar_fort &
139 & (fa, inumer,inimes,irep,llfata,clmess, &
140 & clnspr,clacti(1:ilnomc),.false.)
141 ENDIF
142 !
143 IF (lhook) CALL dr_hook('FACAGE_MT',1,zhook_handle)
144 END SUBROUTINE facage_fort
145 
146 
147 
148 ! Oct-2012 P. Marguinaud 64b LFI
149 SUBROUTINE facage64 &
150 & (cdnomc, ldgard)
151 USE fa_mod, ONLY : fa => fa_com_default, &
154 USE lfi_precision
155 IMPLICIT NONE
156 ! Arguments
157 CHARACTER (LEN=*) CDNOMC ! IN
158 LOGICAL LDGARD ! IN
159 
160 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
161 
162 CALL facage_fort &
163 & (fa, cdnomc, ldgard)
164 
165 END SUBROUTINE facage64
166 
167 SUBROUTINE facage &
168 & (cdnomc, ldgard)
169 USE fa_mod, ONLY : fa => fa_com_default, &
172 USE lfi_precision
173 IMPLICIT NONE
174 ! Arguments
175 CHARACTER (LEN=*) CDNOMC ! IN
176 LOGICAL LDGARD ! IN
177 
178 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
179 
180 CALL facage_mt &
181 & (fa, cdnomc, ldgard)
182 
183 END SUBROUTINE facage
184 
185 SUBROUTINE facage_mt &
186 & (fa, cdnomc, ldgard)
187 USE fa_mod, ONLY : fa_com
188 USE lfi_precision
189 IMPLICIT NONE
190 ! Arguments
191 type(fa_com) fa ! INOUT
192 CHARACTER (LEN=*) CDNOMC ! IN
193 LOGICAL LDGARD ! IN
194 ! Local integers
195 ! Convert arguments
196 
197 
198 CALL facage_fort &
199 & (fa, cdnomc, ldgard)
200 
201 
202 END SUBROUTINE facage_mt
203 
204 !INTF CDNOMC IN
205 !INTF LDGARD IN
integer, parameter jplikb
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine facage_fort(FA, CDNOMC, LDGARD)
Definition: facage.F90:5
subroutine facage_mt(FA, CDNOMC, LDGARD)
Definition: facage.F90:187
subroutine new_fa_default()
Definition: fa_mod.F90:649
subroutine fanuca_fort(FA, CDNOMC, KRANGC, LDVERR)
Definition: fanuca.F90:5
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine facage64(CDNOMC, LDGARD)
Definition: facage.F90:151
subroutine farine_fort(FA, KOPTIO)
Definition: farine.F90:5
logical lhook
Definition: yomhook.F90:15
subroutine facage(CDNOMC, LDGARD)
Definition: facage.F90:169
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
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