SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FAISAN_MT (FA, KREP, KNUMER, CDNOMA, PDONNE, KLONGD ) 00003 USE FA_MOD, ONLY : FA_COM 00004 USE PARKIND1, ONLY : JPRB 00005 USE YOMHOOK , ONLY : LHOOK, DR_HOOK 00006 C**** 00007 C Sous-programme d'ecriture d'un article de donnees non assimila- 00008 C bles a un champ horizontal sur un fichier ARPEGE. 00009 C ( Integration Simple d'un Article Non code ) 00010 C** 00011 C Arguments : KREP (Sortie) ==> Code-reponse du sous-programme; 00012 C KNUMER (Entree) ==> Numero de l'unite logique; 00013 C CDNOMA (Entree) ==> Nom de l'article; 00014 C ( Tableau ) PDONNE (Entree) ==> Donnees a ecrire; 00015 C KLONGD (Entree) ==> Nombre de mots a ecrire. 00016 C 00017 #include "precision.h" 00018 C 00019 C 00020 TYPE(FA_COM) :: FA 00021 INTEGER KREP, KNUMER, KLONGD 00022 C 00023 INTEGER ILCDNO, IRANG, IREP, ILNOMA, INIMES, ILACTI 00024 C 00025 REAL (KIND=JPDBLR) PDONNE (KLONGD) 00026 C 00027 LOGICAL LLVERF, LLRLFI 00028 C 00029 CHARACTER CDNOMA*(*) 00030 C 00031 #include "facom2.h" 00032 #include "facom_mt.h" 00033 C** 00034 C 1. - CONTROLES ET INITIALISATIONS. 00035 C----------------------------------------------------------------------- 00036 C 00037 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00038 IF (LHOOK) CALL DR_HOOK('FAISAN_MT',0,ZHOOK_HANDLE) 00039 LLVERF=.FALSE. 00040 LLRLFI=.FALSE. 00041 ILCDNO=LEN (CDNOMA) 00042 CALL FANUMU_MT (FA, KNUMER,IRANG) 00043 C 00044 IF (IRANG.EQ.0) THEN 00045 IREP=-51 00046 GOTO 1001 00047 ELSEIF (KLONGD.LE.0) THEN 00048 IREP=-64 00049 GOTO 1001 00050 ELSEIF (ILCDNO.LE.0) THEN 00051 IREP=-65 00052 GOTO 1001 00053 ENDIF 00054 C 00055 C Verrouillage eventuel du fichier. 00056 C 00057 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'ON') 00058 LLVERF=FA%LFAMUL 00059 C 00060 IF (FA%LCREAF(IRANG)) THEN 00061 IREP=-85 00062 GOTO 1001 00063 ELSEIF (CDNOMA.EQ.FA%CPCACH.OR.CDNOMA.EQ.FA%CPCADI.OR. 00064 S CDNOMA.EQ.FA%CPCAFS.OR.CDNOMA.EQ.FA%CPCARP.OR. 00065 S CDNOMA.EQ.FA%CPDATE.OR. 00066 S CDNOMA.EQ.FA%CIDENT(IRANG)) THEN 00067 IREP=-111 00068 GOTO 1001 00069 ENDIF 00070 C** 00071 C 2. - ECRITURE DE L'ARTICLE DE DONNEES SUR LE FICHIER. 00072 C----------------------------------------------------------------------- 00073 C 00074 ILNOMA=MIN ( FA%NCPCAD, LEN (CDNOMA) ) 00075 CLNOMA(1:ILNOMA)=CDNOMA(1:ILNOMA) 00076 C 00077 CALL LFIECR_MT (FA%LFI, IREP,KNUMER,CLNOMA(1:ILNOMA), 00078 S PDONNE,KLONGD) 00079 LLRLFI=IREP.NE.0 00080 C** 00081 C 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL, 00082 C VIA LE SOUS-PROGRAMME "FAIPAR" . 00083 C----------------------------------------------------------------------- 00084 C 00085 1001 CONTINUE 00086 KREP=IREP 00087 LLFATA=LLMOER (IREP,IRANG) 00088 C 00089 C Deverrouillage eventuel du fichier. 00090 C 00091 IF (LLVERF) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'OFF') 00092 C 00093 IF (LLFATA) THEN 00094 INIMES=2 00095 ELSE 00096 INIMES=IXNVMS(IRANG) 00097 ENDIF 00098 C 00099 IF (.NOT.LLFATA.AND.INIMES.NE.2) THEN 00100 IF (LHOOK) CALL DR_HOOK('FAISAN_MT',1,ZHOOK_HANDLE) 00101 RETURN 00102 ENDIF 00103 C 00104 CLNSPR='FAISAN' 00105 C 00106 IF (IREP.NE.-65) THEN 00107 ILACTI=MIN (ILCDNO,FA%NCPCAD) 00108 CLACTI(1:ILACTI)=CDNOMA(:ILACTI) 00109 ELSE 00110 ILACTI=8 00111 CLACTI(1:ILACTI)=FA%CHAINC(:ILACTI) 00112 ENDIF 00113 C 00114 WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER=' 00115 ',I3, S '', CDNOMA='''''',A,'''''', KLONGD='',I8)') 00116 S KREP,KNUMER,CLACTI(1:ILACTI),KLONGD 00117 CALL FAIPAR_MT (FA, KNUMER,INIMES,IREP,LLFATA,CLMESS, 00118 S CLNSPR, CLACTI(1:ILACTI),LLRLFI) 00119 C 00120 IF (LHOOK) CALL DR_HOOK('FAISAN_MT',1,ZHOOK_HANDLE) 00121 END 00122