SURFEX v8.1
General documentation of Surfex
lfiedo.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 SUBROUTINE lfiedo_fort &
4 & (lfi, krep, knumer, krec, ktab, knbecr, &
5 & kfactm, ydfic, kretin)
6 USE lfimod, ONLY : lficom, lficrw
7 USE parkind1, ONLY : jprb, jpia, jpib, jpim
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-programme charge des Ecritures de DOnnees du logiciel LFI,
13 ! *SAUF* pour les articles d'index de type caractere.
14 !**
15 ! Arguments: KREP (Sortie) ==> Code-reponse ( zero si OK; code-
16 ! reponse du "WRITE" FORTRAN sinon);
17 ! KNUMER (Entree) ==> NUMERo d'unite logique FORTRAN;
18 ! KREC (Entree) ==> Numero d'enregistrement a ecrire;
19 ! KTAB (Sortie) ==> Zone a ecrire, de Longueur
20 ! LFI%JPLARD*KFACTM *mots*;
21 ! KNBECR (Entree ==> Compteur d'ECRitures sur l'unite;
22 ! +Sortie)
23 ! KFACTM (Entree) ==> FACteur Multiplicatif LFI de
24 ! l'unite logique;
25 ! KRETIN (Sortie) ==> Code-retour interne.
26 !
27 !
28 TYPE(lficom) :: LFI
29 INTEGER (KIND=JPLIKB) KREP, KNUMER, KREC, KNBECR, KFACTM, KRETIN
30 type(lficrw) ydfic
31 !
32 INTEGER (KIND=JPLIKB), TARGET :: KTAB (lfi%jplard*kfactm)
33 !
34 INTEGER (KIND=JPLIKB), TARGET :: JTAB (lfi%jplard*kfactm)
35 INTEGER (KIND=JPLIKB), POINTER :: ITAB (:)
36 INTEGER (KIND=JPIB) IREP, ISIZE
37 
38 !
39 ! ECRITURE .
40 !
41 REAL(KIND=JPRB) :: ZHOOK_HANDLE
42 !
43 IF (lhook) CALL dr_hook('LFIEDO_FORT',0,zhook_handle)
44 
45 IF (ydfic%L_C_BTSWAP) THEN
46  CALL jswap (jtab, ktab, 8_jplikm, int(SIZE (ktab), jplikm))
47  itab => jtab
48 ELSE
49  itab => ktab
50 ENDIF
51 IF (knumer > 0) THEN
52  WRITE (unit=knumer,rec=krec,err=901,iostat=krep) itab
53 ELSE
54  krep=0
55  CALL lfisee (lfi, ydfic%N_C_FPDESC, ydfic%N_C_OFFSET, kfactm, krec, krep)
56  IF (krep /= 0) GOTO 901
57  isize = int(SIZE (itab) * 8, jplikb)
58  CALL fi_fwrite (irep, itab, 1_jplikb, isize, ydfic%N_C_FPDESC)
59  IF (irep /= isize) THEN
60  krep = 1
61  GOTO 901
62  ENDIF
63  ydfic%N_C_OFFSET = ydfic%N_C_OFFSET + isize
64 ENDIF
65 
66 !
67 IF (lfi%LMISOP) THEN
68  WRITE (unit=lfi%NULOUT,fmt=*) &
69 & '+++++ LFIEDO - WRITE / ',knumer,', REC = ',krec, &
70 & ' +++++'
71 ENDIF
72 !
73 knbecr=knbecr+1
74 kretin=0
75 GOTO 1001
76 !
77 901 CONTINUE
78 kretin=1
79 !
80 1001 CONTINUE
81 !
82 IF (lhook) CALL dr_hook('LFIEDO_FORT',1,zhook_handle)
83 END SUBROUTINE lfiedo_fort
integer, parameter jplikb
integer, parameter jpim
Definition: parkind1.F90:13
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter jpia
Definition: parkind1.F90:19
logical lhook
Definition: yomhook.F90:15
subroutine lfisee(LFI, KFPDESC, KOFFSET, KFACTM, KREC, KREP)
Definition: lfisee.F90:2
integer, parameter jplikm
integer, parameter jpib
Definition: parkind1.F90:14
Definition: lfimod.F90:1
subroutine lfiedo_fort(LFI, KREP, KNUMER, KREC, KTAB, KNBECR, KFACTM, YDFIC, KRETIN)
Definition: lfiedo.F90:6