35
36
37
39
40
41
42#include "implicit_f.inc"
43
44
45
46 INTEGER, INTENT(INOUT) :: LEN_IA
47 INTEGER, INTENT(IN) :: PROC
48 INTEGER, INTENT(IN) :: NUMNOD
49 INTEGER, INTENT(IN) :: NSURF
50 INTEGER, INTENT(IN) :: NUMELS
51 INTEGER, INTENT(IN) :: NUMELQ
52 INTEGER, INTENT(IN) :: NUMELC
53 INTEGER, INTENT(IN) :: NUMELT
54 INTEGER, INTENT(IN) :: NUMELP
55 INTEGER, INTENT(IN) :: NUMELR
56 INTEGER, DIMENSION(NUMNOD), INTENT(IN) :: NODLOCAL
57 INTEGER, INTENT(IN) :: SCEL
58 INTEGER, DIMENSION(SCEL), INTENT(IN) :: CEL
59 INTEGER, INTENT(IN) :: LENISURF_L
60 INTEGER, INTENT(IN) :: LTITR
61 INTEGER, INTENT(IN) :: NSPMD
62 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
63 TYPE(SURF_), DIMENSION(NSURF,NSPMD), INTENT(IN) :: IGRSURF_PROC
64
65
66
67 INTEGER :: ISU,J,K,ERR,NSEG
68 INTEGER :: L_SURF,ID,TYPE,ID_MADYMO,IAD_BUFR
69 INTEGER :: NB_MADYMO,TYPE_MADYMO,LEVEL,TH_SURF,ISH4N3N,NSEG_R2R_ALL
70 INTEGER :: NSEG_R2R_SHARE
71 INTEGER, DIMENSION(LTITR) :: ITITLE
72 INTEGER, DIMENSION(NSURF) :: NSEG_L
73 CHARACTER(LEN=nchartitle) :: TITR
74 INTEGER, ALLOCATABLE, DIMENSION (:) :: IGRSURF_L
75
76 INTEGER :: JJ
77 INTEGER :: NODE_ID,LOCAL_NODE_ID,ELEM,ELTYP
78 INTEGER, DIMENSION(0:7) :: OFFSET
79
80
81 offset(0:7) = 0
82 offset(1) = 0
83 offset(2) = numels
84 offset(3) = numels+numelq
85 offset(7) = numels+numelq+ numelc+numelt+numelp+numelr
86
87 DO isu=1,nsurf
88 titr = igrsurf(isu)%TITLE
91 ENDDO
92 len_ia = len_ia + nsurf
93
94 err = 0
95 ALLOCATE (igrsurf_l(lenisurf_l), stat=err)
96
97
98
99 DO isu=1,nsurf
100 nseg = igrsurf(isu)%NSEG
101 nseg_l(isu) = igrsurf_proc(isu,proc+1)%NSEG
102 ENDDO
103 l_surf = 0
104
105 DO isu=1,nsurf
107 nseg = igrsurf(isu)%NSEG
108 TYPE = igrsurf(isu)%TYPE
109 id_madymo = igrsurf(isu)%ID_MADYMO
110 iad_bufr = igrsurf(isu)%IAD_BUFR
111 nb_madymo = igrsurf(isu)%NB_MADYMO
112 type_madymo = igrsurf(isu)%TYPE_MADYMO
113 level = igrsurf(isu)%LEVEL
114 th_surf = igrsurf(isu)%TH_SURF
115 ish4n3n = igrsurf(isu)%ISH4N3N
116 nseg_r2r_all = igrsurf(isu)%NSEG_R2R_ALL
117 nseg_r2r_share = igrsurf(isu)%NSEG_R2R_SHARE
118
119
120
121 igrsurf_l(l_surf+1) =
id
122 l_surf = l_surf+1
123 igrsurf_l(l_surf+1) = nseg_l(isu)
124 l_surf = l_surf+1
125 igrsurf_l(l_surf+1) = TYPE
126 l_surf = l_surf+1
127 igrsurf_l(l_surf+1) = id_madymo
128 l_surf = l_surf+1
129 igrsurf_l(l_surf+1) = iad_bufr
130 l_surf = l_surf+1
131 igrsurf_l(l_surf+1) = nb_madymo
132 l_surf = l_surf+1
133 igrsurf_l(l_surf+1) = type_madymo
134 l_surf = l_surf+1
135 igrsurf_l(l_surf+1) = level
136 l_surf = l_surf+1
137 igrsurf_l(l_surf+1) = th_surf
138 l_surf = l_surf+1
139 igrsurf_l(l_surf+1) = ish4n3n
140 l_surf = l_surf+1
141 igrsurf_l(l_surf+1) = nseg_r2r_all
142 l_surf = l_surf+1
143 igrsurf_l(l_surf+1) = nseg_r2r_share
144 l_surf = l_surf+1
145 DO jj=1,igrsurf_proc(isu,proc+1)%NSEG
146 j = igrsurf_proc(isu,proc+1)%LOCAL_SEG(jj)
147 DO k=1,4
148 node_id = igrsurf(isu)%NODES(j,k)
149 IF(node_id/=0) THEN
150 local_node_id = nodlocal(node_id)
151 ELSE
152 local_node_id = 0
153 ENDIF
154 igrsurf_l(l_surf+1) = local_node_id
155 l_surf = l_surf+1
156 ENDDO
157 eltyp = igrsurf_proc(isu,proc+1)%ELTYP(jj)
158 elem = igrsurf_proc(isu,proc+1)%ELEM(jj) + offset(eltyp)
159 IF(elem/=0) elem = cel(elem)
160 igrsurf_l(l_surf+1) = eltyp
161 l_surf = l_surf+1
162 igrsurf_l(l_surf+1) = elem
163 l_surf = l_surf+1
164 ENDDO
165 ENDDO
166
168
169 DEALLOCATE (igrsurf_l)
170
171 len_ia = len_ia + l_surf
172
173 RETURN
void write_i_c(int *w, int *len)