The TELEMAC-MASCARET system  trunk
write_data.f
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE write_data
3 ! *********************
4 !
5  &(fformat,fileres,nvars,time,timestep,outvar,nomvar,bvarsor,n,mesh)
6 !
7 !***********************************************************************
8 ! BIEF V7P1
9 !***********************************************************************
10 !
11 !brief WRITES DATA VALUES ON A MESH INTO THE DATA FILE OF THE
12 !+ GIVEN FILE FORMAT.
13 !+
14 !+ DATA VALUES ARE STORED IN A BIEF_OBJ BLOCK (BVARSOR),
15 !+ AND THE LOGICAL OUTVAR INDICATES FOR EACH VARIABLE IF
16 !+ WE SHOULD PRINT IT OUT OR NOT.
17 !
18 !history R NEBAUER (LNHE)
19 !+ 25/11/08
20 !+ V6P0
21 !+
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history Y. AUDOUIN (EDF), V.STOBIAC (EDF)
36 !+ 10/12/2014
37 !+ V7P0
38 !+
39 !+ Use of Hermes interface to write data and mesh update option
40 !
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !| FFORMAT |-->| FILE FORMAT
43 !| FILERES |-->| LOGICAL UNIT OF FILE
44 !| NVARS |-->| NUMBER OF VARIABLES
45 !| TIME |-->| TIME
46 !| TIMESTEP |-->| TIME STEP (INTEGER), NOT DT.
47 !| OUTVAR |-->| VARIABLES TO BE PUT IN THE FILE
48 !| NOMVAR |-->| NAME OF VARIABLES
49 !| BVARSOR |-->| BIEF BLOCK CONTAINING THE VARIABLES VARIABLES
50 !| N |-->| NUMBER OF VALUES (MAY BE DIFFERENT FROM
51 !| | | THE NUMBER OF DEGREES OF FREEDOM, E.G. FOR
52 !| | | QUADRATIC ELEMENTS ONLY THE LINEAR VALUES
53 !| | | ARE EXITED)
54 !| MESH (OPTIONAL) |-->| MESH STRUCTURE
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !
57  USE bief, ex_write_data => write_data
59 !
61  IMPLICIT NONE
62 !
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
67  INTEGER, INTENT(IN) :: FILERES,N
68  INTEGER, INTENT(IN) :: NVARS
69  DOUBLE PRECISION, INTENT(IN) :: TIME
70  INTEGER, INTENT(IN) :: TIMESTEP
71  CHARACTER(LEN=32),DIMENSION(NVARS), INTENT(IN) :: NOMVAR
72  LOGICAL, DIMENSION(NVARS), INTENT(IN) :: OUTVAR
73  TYPE(bief_obj), INTENT(IN) :: BVARSOR
74  TYPE(bief_mesh), INTENT(IN), OPTIONAL :: MESH
75 !
76 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
77 !
78  LOGICAL :: FIRST_VAR
79  INTEGER :: I,IERR, NPT, NB_DIM
80  DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: COORD
81  CHARACTER(LEN=32) :: VAR_NAME
82 !
83 !-----------------------------------------------------------------------
84 !
85  ! CONSTRUCT COORDINATES TABLE
86  IF(PRESENT(mesh)) THEN
87  ! SET VARIABLES
88  npt = mesh%NPOIN
89  nb_dim = mesh%DIM1
90  ! SET COORDINATES
91  ALLOCATE(coord(nb_dim*npt))
92  DO i=1,npt
93  coord(i) = mesh%X%R(i)
94  coord(i+npt) = mesh%Y%R(i)
95  IF(nb_dim.EQ.3) coord(i+2*npt) = mesh%Z%R(i)
96  ENDDO
97  ! UPDATE COORDINATES IN 3D RES FILES
98  CALL update_data_mesh(fformat,fileres,time,timestep,
99  & nb_dim,npt,coord,ierr)
100  DEALLOCATE(coord)
101  ENDIF
102 !
103  ! LOOP ON ALL THE VARIABLES
104  first_var = .true.
105  DO i=1,nvars
106  ! IF THE VARIABLE MUST BE WRITTEN
107  IF(outvar(i)) THEN
108  IF(ASSOCIATED(bvarsor%ADR(i)%P%R)) THEN
109  var_name = nomvar(i)
110  CALL add_data(fformat,fileres,var_name,time,timestep,
111  & first_var,bvarsor%ADR(i)%P%R,n,ierr)
112  CALL check_call(ierr,'WRITE_DATASET:ADD_DATA')
113  first_var = .false.
114  ELSE
115  WRITE(lu,*) 'WRITE_DATA: VARIABLE NO: ',i
116  WRITE(lu,*) ' NOT OR NOT WELL ALLOCATED'
117  WRITE(lu,*) ' OR POINTER NOT ASSOCIATED '
118  ENDIF
119  ENDIF
120  ENDDO
121 
122 !
123 !-----------------------------------------------------------------------
124 !
125  RETURN
126  END SUBROUTINE
subroutine add_data(FFORMAT, FILE_ID, VAR_NAME, TIME, RECORD, FIRST_VAR, VAR_VALUE, N, IERR)
Definition: add_data.f:8
subroutine update_data_mesh(FFORMAT, FILE_ID, TIME, RECORD, NB_DIM_MESH, NPOIN, COORD, IERR)
subroutine write_data(FFORMAT, FILERES, NVARS, TIME, TIMESTEP, OUTVAR, NOMVAR, BVARSOR, N, MESH)
Definition: write_data.f:7
Definition: bief.f:3