Salome HOME
Homard executable
[modules/homard.git] / src / tool / AV_Conversion / vcms21.F
1       subroutine vcms21 ( nbno3d, famnoe, coonoe, coocst,
2      >                    nbno2d, nustno, nu2dno,
3      >                    famn2d, coon2d, famnzz,
4      >                    ulsort, langue, codret )
5 c ______________________________________________________________________
6 c
7 c                             H O M A R D
8 c
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c
17 c    HOMARD est une marque deposee d'Electricite de France
18 c
19 c Copyright EDF 1996
20 c Copyright EDF 1998
21 c Copyright EDF 2002
22 c Copyright EDF 2020
23 c ______________________________________________________________________
24 c
25 c    aVant adaptation - Conversion de Maillage -
26 c     -                 -             -
27 c                       Saturne 2D - phase 1 - Neptune 2D
28 c                       -       -          -
29 c ______________________________________________________________________
30 c .        .     .        .                                            .
31 c .  nom   . e/s . taille .           description                      .
32 c .____________________________________________________________________.
33 c . nbno3d . e   .   1    . nombre de noeuds du maillage 3d            .
34 c . famnoe . e   . nbno3d . famille des noeuds                         .
35 c . coonoe . e   . nbno3d . coordonnees des noeuds                     .
36 c .        .     . * sdim .                                            .
37 c . coocst . e   .   11   . 1 : coordonnee constante eventuelle        .
38 c .        .     .        . 2, 3, 4 : xmin, ymin, zmin                 .
39 c .        .     .        . 5, 6, 7 : xmax, ymax, zmax                 .
40 c .        .     .        . 8, 9, 10 : -1 si constant, max-min sinon   .
41 c .        .     .        . 11 : max des (max-min)                     .
42 c . nbno2d . e   .   1    . nombre de noeuds du maillage 2d            .
43 c . nustno .  s  . nbno2d . numero saturne/neptune des noeuds du calcul.
44 c . nu2dno .  s  . nbno3d . numero du calcul des noeuds saturne/neptune.
45 c . famn2d .  s  . nbno2d . famille des noeuds  du maillage 2d         .
46 c . coon2d .  s  .nbno2d*2. coordonnees des noeuds du maillage 2d      .
47 c . famnzz .  s  .   1    . famille du noeud memorisant cooinf et zsup .
48 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
49 c . langue . e   .    1   . langue des messages                        .
50 c .        .     .        . 1 : francais, 2 : anglais                  .
51 c . codret . es  .    1   . code de retour des modules                 .
52 c .        .     .        . 0 : pas de probleme                        .
53 c .        .     .        . 1 : probleme                               .
54 c ______________________________________________________________________
55 c
56 c====
57 c 0. declarations et dimensionnement
58 c====
59 c
60 c 0.1. ==> generalites
61 c
62       implicit none
63       save
64 c
65       character*6 nompro
66       parameter ( nompro = 'VCMS21' )
67 c
68 #include "nblang.h"
69 c
70 c 0.2. ==> communs
71 c
72 #include "envex1.h"
73 c
74 #include "envca1.h"
75 c
76 c 0.3. ==> arguments
77 c
78       integer nbno3d, nbno2d
79       integer nustno(nbno2d), nu2dno(nbno3d)
80       integer famnoe(nbno3d), famn2d(nbno2d), famnzz
81 c
82       double precision coocst(11)
83       double precision coon2d(nbno2d,2)
84       double precision coonoe(nbno3d,sdim)
85 c
86       integer ulsort, langue, codret
87 c
88 c 0.4. ==> variables locales
89 c
90       integer iaux, jaux
91       integer iaux1, iaux2
92 c
93       double precision daux
94 c
95       integer nbmess
96       parameter ( nbmess = 10 )
97       character*80 texte(nblang,nbmess)
98 c
99 c 0.5. ==> initialisations
100 c ______________________________________________________________________
101 c
102 c====
103 c 1. messages
104 c====
105 c
106 #include "impr01.h"
107 c
108 #ifdef _DEBUG_HOMARD_
109       write (ulsort,texte(langue,1)) 'Entree', nompro
110       call dmflsh (iaux)
111 #endif
112 c
113       texte(1,4) =
114      > '(''Direction '',a1,'' : mini = '',g12.5,'' maxi = '',g12.5)'
115       texte(1,5) =
116      >'(''Nombre de noeuds pour le maillage 3D          :'',i10)'
117       texte(1,6) =
118      >'(''Nombre de noeuds attendus pour le maillage 2D :'',i10)'
119       texte(1,7) =
120      >'(''Nombre de noeuds trouves pour le maillage 2D  :'',i10)'
121       texte(1,8) = '(''==> epaisseur maximale = '',g13.5)'
122       texte(1,9) = '(''==> coordonnee '',a3,'' ='',g13.5)'
123 c
124       texte(2,4) =
125      > '(a1,''direction '','' : mini = '',g12.5,'' maxi = '',g12.5)'
126       texte(2,5) =
127      > '(''Number of nodes for the 3D mesh         :'',i10)'
128       texte(2,6) =
129      > '(''Expected number of nodes for the 2D mesh:'',i10)'
130       texte(2,7) =
131      > '(''Found number of nodes for the 2D mesh   :'',i10)'
132       texte(2,8) = '(''==> maximal thickness:'',g13.5)'
133       texte(2,9) = '(''==> '',a3,'' coordinate:'',g13.5)'
134 c
135 #include "impr03.h"
136 c
137       codret = 0
138 c
139 #ifdef _DEBUG_HOMARD_
140       write (ulsort,90002) 'maextr', maextr
141       write (ulsort,90002) 'nbno2d', nbno2d
142 #endif
143 c
144       if ( maextr.eq.1 ) then
145         iaux1 = 2
146         iaux2 = 3
147       elseif ( maextr.eq.2 ) then
148         iaux1 = 1
149         iaux2 = 3
150       elseif ( maextr.eq.3 ) then
151         iaux1 = 1
152         iaux2 = 2
153       else
154         codret = 1
155       endif
156 c
157 #ifdef _DEBUG_HOMARD_
158       if ( codret.eq.0 ) then
159       write (ulsort,texte(langue,4)) 'x', coocst(2), coocst(5)
160       write (ulsort,texte(langue,4)) 'y', coocst(3), coocst(6)
161       write (ulsort,texte(langue,4)) 'z', coocst(4), coocst(7)
162       write (ulsort,texte(langue,8)) coocst(10)
163       write (ulsort,texte(langue,9)) 'inf', coocst(maextr+1)
164       write (ulsort,texte(langue,9)) 'sup', coocst(maextr+4)
165       endif
166 #endif
167 c
168 c====
169 c 2. classement des noeuds
170 c    on retient tous ceux qui sont dans le plan cooinf
171 c    on teste la proximite de cooinf au millionieme de l'epaisseur
172 c    on ne remplit le tableau que si on n'a pas depasse le maximum
173 c    de l'allocation pour eviter les plantages parasites
174 c====
175 #ifdef _DEBUG_HOMARD_
176       write (ulsort,90002) '2. classement des noeuds ; codret', codret
177 #endif
178 c
179       if ( codret.eq.0 ) then
180 c
181 #ifdef _DEBUG_HOMARD_
182       write (ulsort,texte(langue,5)) nbno3d
183       write (ulsort,texte(langue,6)) nbno2d-1
184 #endif
185 c
186       do 21 , iaux = 1 , nbno3d
187         nu2dno(iaux) = 0
188    21 continue
189 c
190       daux = coocst(10)*1.d-6
191 c
192       jaux = 0
193 c
194       do 22 , iaux = 1 , nbno3d
195 c
196         if ( abs(coonoe(iaux,maextr)-coocst(maextr+1)).le.daux ) then
197 c
198           jaux = jaux + 1
199           if ( jaux.le.(nbno2d-1) ) then
200             coon2d(jaux,1) = coonoe(iaux,iaux1)
201             coon2d(jaux,2) = coonoe(iaux,iaux2)
202             famn2d(jaux) = famnoe(iaux)
203             nustno(jaux) = iaux
204             nu2dno(iaux) = jaux
205           endif
206 c
207         endif
208 c
209    22 continue
210 c
211 #ifdef _DEBUG_HOMARD_
212       write (ulsort,texte(langue,7)) jaux
213 #endif
214       if ( jaux.ne.(nbno2d-1) ) then
215         write (ulsort,texte(langue,4)) 'x', coocst(2), coocst(5)
216         write (ulsort,texte(langue,4)) 'y', coocst(3), coocst(6)
217         write (ulsort,texte(langue,4)) 'z', coocst(4), coocst(7)
218         write (ulsort,texte(langue,6)) nbno2d-1
219         write (ulsort,texte(langue,7)) jaux
220         codret = 2
221       endif
222 c
223       endif
224 c
225 #ifdef _DEBUG_HOMARD_
226       write (ulsort,texte(langue,7)) nbno2d-1
227 #endif
228 c
229 c====
230 c 3. creation d'un noeud supplementaire pour conserver les cotes des
231 c    faces inferieures et superieures : ( x = cooinf , y = zsup )
232 c    on utilise une famille qui n'existe pas dans le maillage fourni.
233 c====
234 #ifdef _DEBUG_HOMARD_
235       write (ulsort,90002) '3. Noeud supplementaire ; codret', codret
236 #endif
237 c
238       if ( codret.eq.0 ) then
239 c
240       jaux = nbno2d - 1
241       famnzz = 0
242 c
243    30 continue
244 c
245       famnzz = famnzz + 1
246 c
247       do 31 , iaux = 1 , jaux
248 c
249         if ( famn2d(iaux).eq.famnzz ) then
250           goto 30
251         endif
252 c
253    31 continue
254 c
255       coon2d(nbno2d,1) = coocst(maextr+1)
256       coon2d(nbno2d,2) = coocst(maextr+4)
257       famn2d(nbno2d) = famnzz
258       nustno(nbno2d) = 0
259 c
260 #ifdef _DEBUG_HOMARD_
261       write (ulsort,90024) 'Noeud supplementaire', nbno2d,
262      >                     coocst(maextr+1), coocst(maextr+4)
263 #endif
264 c
265       endif
266 c
267 c====
268 c 4. la fin
269 c====
270 c
271       if ( codret.ne.0 ) then
272 c
273 #include "envex2.h"
274 c
275       write (ulsort,texte(langue,1)) 'Sortie', nompro
276       write (ulsort,texte(langue,2)) codret
277       endif
278 c
279 #ifdef _DEBUG_HOMARD_
280       write (ulsort,texte(langue,1)) 'Sortie', nompro
281       call dmflsh (iaux)
282 #endif
283 c
284       end