1 subroutine inffre ( option, fotrva, foquva, titre0,
2 > nocham, nrocmp, nrotab,
5 > nnoeca, ntreca, nqueca,
6 > nnoeho, ntreho, nqueho,
7 > lgnoin, lgtrin, lgquin,
8 > nnoein, ntrein, nquein,
10 > ulsort, langue, codret )
11 c ______________________________________________________________________
15 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
17 c Version originale enregistree le 18 juin 1996 sous le numero 96036
18 c aupres des huissiers de justice Simart et Lavoir a Clamart
19 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
20 c aupres des huissiers de justice
21 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
23 c HOMARD est une marque deposee d'Electricite de France
29 c ______________________________________________________________________
31 c INformation : Fichier - Fonction - REcuperation
33 c ______________________________________________________________________
35 c prise en compte de la fonction
36 c ______________________________________________________________________
38 c . nom . e/s . taille . description .
39 c .____________________________________________________________________.
40 c . option . e . 1 . 1 : la sortie est exprimee sur des elements.
41 c . . . . Si le champ est aux noeuds, on prend .
42 c . . . . la moyenne des valeurs sur tous ses .
44 c . . . . Si le champ est aux noeuds par element .
45 c . . . . ou aux points de Gauss, on prend la .
46 c . . . . moyenne des valeurs sur l'element .
47 c . . . . 2 : la sortie est exprimee sur des noeuds .
48 c . . . . Si le champ est aux elements, on prend .
49 c . . . . la moyenne des valeurs sur tous les .
50 c . . . . elements voisins du noeud .
51 c . fotrva . s . nbtrvi . fonctions triangles : valeur .
52 c . . . . ou fonctions par noeud .
53 c . foquva . s . nbquvi . fonctions quadrangles : valeur .
54 c . titre0 . s . char * . titre auxiliaire .
55 c . nocham . e . char8 . nom de l'objet champ .
56 c . nrocmp . e . 1 . 0 : le module (non operationnel) .
57 c . . . . numero de la composante retenue .
58 c . nrotab . e . 1 . numero du tableau associe au pas de temps .
59 c . nbtrvi . e . 1 . nombre triangles visualisables .
60 c . nbquvi . e . 1 . nombre de quadrangles visualisables .
61 c . nntrvi . e .10nbtrvi. 1 : niveau du triangle a afficher .
62 c . . . . 2 : numero HOMARD du triangle .
63 c . . . . 3, 4, 5 : numeros des noeuds p1 .
64 c . . . . 6 : famille du triangle .
65 c . . . . 7, 8, 9 : numeros des noeuds p2 .
66 c . . . . 10 : numero du noeud interne .
67 c . nnquvi . e .12nbquvi. 1 : niveau du quadrangle a afficher .
68 c . . . . 2 : numero HOMARD du quadrangle .
69 c . . . . 3, 4, 5, 6 : numeros des noeuds p1 .
70 c . . . . 7 : famille du quadrangle .
71 c . . . . 8, 9, 10, 11 : numeros des noeuds p2 .
72 c . . . . 12 : numero du noeud interne .
73 c . nnoeca . e . renoto . noeuds en entree dans le calcul .
74 c . ntreca . e . retrto . nro des triangles dans le calcul en entree .
75 c . nqueca . e . requto . nro des quads dans le calcul en entree .
76 c . nnoeho . e . renoto . nro des noeuds dans HOMARD en entree .
77 c . ntreho . e . retrto . nro des triangles dans HOMARD en entree .
78 c . nqueho . e . requto . nro des quads dans HOMARD en entree .
79 c . decanu . e . -1:7 . decalage des numerotations selon le type .
80 c . ulsort . e . 1 . unite logique de la sortie generale .
81 c . langue . e . 1 . langue des messages .
82 c . . . . 1 : francais, 2 : anglais .
83 c . codret . s . 1 . code de retour des modules .
84 c . . . . 0 : pas de probleme .
85 c ______________________________________________________________________
88 c 0. declarations et dimensionnement
91 c 0.1. ==> generalites
97 parameter ( nompro = 'INFFRE' )
122 integer nrocmp, nrotab
123 integer nbtrvi, nbquvi
124 integer nntrvi(10,nbtrvi)
125 integer nnquvi(12,nbquvi)
126 integer nnoeca(renoto), ntreca(retrto), nqueca(requto)
127 integer nnoeho(*), ntreho(*), nqueho(*)
128 integer lgnoin, lgtrin, lgquin
129 integer nnoein(*), ntrein(*), nquein(*)
132 double precision fotrva(*), foquva(*)
137 integer ulsort, langue, codret
139 c 0.4. ==> variables locales
141 integer nbcomp, nbtvch, typcha
142 integer adnocp, adcaen, adcare, adcaca
144 integer typgeo, ngauss, nbenmx, nbvapr, nbtyas
145 integer carsup, nbtafo, typint
146 integer advale, advalr, adobch, adprpg, adtyas
147 integer nbenti, adpcan, adlipr
150 integer iaux1, iaux2, iaux3
151 integer iaux, jaux, kaux
156 double precision daux1, daux2
165 parameter ( nbmess = 10 )
166 character*80 texte(nblang,nbmess)
167 c_______________________________________________________________________
176 #ifdef _DEBUG_HOMARD_
177 write (ulsort,texte(langue,1)) 'Entree', nompro
181 texte(1,4) = '(''Objet champ a examiner : '',a)'
182 texte(1,5) = '(''Nom du champ : '',a)'
183 texte(1,6) = '(a,'' :'',i5)'
184 texte(1,7) = '(''Impossible de projeter sur les noeuds'')'
186 texte(2,4) = '(''Field object : '',a)'
187 texte(2,5) = '(''Field name : '',a)'
188 texte(2,6) = '(a,'' :'',i5)'
189 texte(2,7) = '(''Node projection cannot be done'')'
193 #ifdef _DEBUG_HOMARD_
194 write (ulsort,texte(langue,4)) nocham
195 call gmprsx (nompro,nocham)
196 call gmprsx (nompro,nocham//'.Nom_Comp')
197 call gmprsx (nompro,nocham//'.Cham_Car')
201 c 2. Decodage du champ retenu
204 #ifdef _DEBUG_HOMARD_
205 write (ulsort,texte(langue,3)) 'UTCACH', nompro
207 call utcach ( nocham,
209 > nbcomp, nbtvch, typcha,
210 > adnocp, adcaen, adcare, adcaca,
211 > ulsort, langue, codret )
213 #ifdef _DEBUG_HOMARD_
214 write (ulsort,texte(langue,5)) nomcha
215 write (ulsort,texte(langue,6)) 'nbcomp', nbcomp
216 write (ulsort,texte(langue,6)) 'nbtvch', nbtvch
220 c 3. parcours des differents tableaux stockant les valeurs de ce champ
225 if ( codret.eq.0 ) then
227 do 30 , nrtvch = 1 , nbtvch
229 c 3.1. ==> reperage du bon pas de temps
230 c . on retient le premier tableau correspondant a celui cherche
231 c . ensuite on retient tous ceux qui correspondent au meme
232 c numero de pas de temps. cela correspond au cas ou le champ
233 c est present sur plusieurs supports differents (tria+quad
236 if ( codret.eq.0 ) then
238 c 3.1.1. ==> pour le premier tableau du bon pas de temps
240 if ( nrtvch.eq.nrotab) then
242 numdt = imem(adcaen+nbinec*(nrtvch-1)+1)
245 if ( numdt.ne.ednodt ) then
247 titre0(1:6) = '( t = '
248 daux1 = rmem(adcare+nrtvch-1)
249 call utrech ( daux1, 'G', iaux, titre0(7:jaux),
250 > ulsort, langue, codret )
251 if ( codret.eq.0 ) then
252 titre0(iaux+1:iaux+2) = ' )'
255 if ( codret.ne.0 .or. numdt.eq.ednodt ) then
257 do 31 , iaux = 1 , jaux
258 titre0(iaux:iaux) = ' '
264 c 3.1.2. ==> pour un autre tableau
269 if ( imem(adcaen+nbinec*(nrtvch-1)+1).ne.numdt ) then
275 iaux1 = imem(adcaen+nbinec*(nrtvch-1)+8)
280 c 3.2. ==> reperage de la fonction
282 saux08 = smem(adcaca+nbincc*(nrtvch-1))
284 if ( codret.eq.0 ) then
286 #ifdef _DEBUG_HOMARD_
287 call gmprsx (nompro, saux08 )
288 cgn call gmprsx (nompro, saux08//'.ValeursR' )
291 #ifdef _DEBUG_HOMARD_
292 write (ulsort,texte(langue,3)) 'UTCAFO', nompro
294 call utcafo ( saux08,
296 > typgeo, ngauss, nbenmx, nbvapr, nbtyas,
297 > carsup, nbtafo, typint,
298 > advale, advalr, adobch, adprpg, adtyas,
299 > ulsort, langue, codret )
305 cgn 1789 format(i4,12f15.7)
306 cgn print *, 'ngauss = ',ngauss
307 cgn print *, 'nbenmx = ',nbenmx
308 cgn print *, 'nrocmp = ',nrocmp
309 cgn print *, 'nbtafo = ',nbtafo
310 cgn print *, 'nbvapr = ',nbvapr
311 cgn if ( typgeo.eq.0 ) then
312 cgn do 310,jaux=1,nbenmx
313 cgn print 1789, jaux,
314 cgn > (rmem(advalr+kaux*(jaux-1)+iaux-1),
315 cgn > iaux=iaux1,iaux1+nbcomp-1)
317 cgn do 311,jaux=1,nbenmx*kaux
318 cgn print 1789, jaux,
319 cgn > rmem(advalr+1*(jaux-1))
323 c 3.3. ==> changements de numerotation
325 c 3.3.1. ==> profil eventuel
327 if ( nbvapr.gt.0 ) then
329 if ( codret.eq.0 ) then
331 #ifdef _DEBUG_HOMARD_
332 write (ulsort,texte(langue,3)) 'UTCAPR', nompro
334 call utcapr ( smem(adprpg),
335 > iaux, noprof, adlipr,
336 > ulsort, langue, codret )
342 c 3.3.2. ==> allocation du tableau de renumerotation
344 if ( codret.eq.0 ) then
346 if ( typgeo.eq.0 ) then
348 elseif ( typgeo.eq.edtri3 .or. typgeo.eq.edtri6 ) then
350 elseif ( typgeo.eq.edqua4 .or. typgeo.eq.edqua8 ) then
356 call gmalot ( obpcan, 'entier ', nbenti, adpcan, codret )
360 c 3.3.3. ==> renumerotation
362 if ( codret.eq.0 ) then
364 #ifdef _DEBUG_HOMARD_
365 write (ulsort,texte(langue,6)) 'typgeo', typgeo
366 write (ulsort,texte(langue,6)) 'nbenti', nbenti
367 write (ulsort,texte(langue,6)) 'nbvapr', nbvapr
370 if ( codret.eq.0 ) then
372 call gmalot ( ntrav1, 'entier ', nbenti, adtra1, codret )
376 if ( typgeo.eq.0 ) then
378 if ( codret.eq.0 ) then
381 #ifdef _DEBUG_HOMARD_
382 write (ulsort,texte(langue,3)) 'UTTBRC-no', nompro
385 > lgnoin, nnoein, nbenti, imem(adtra1),
386 > ulsort, langue, codret)
390 if ( codret.eq.0 ) then
394 #ifdef _DEBUG_HOMARD_
395 write (ulsort,texte(langue,3)) 'UTPR02-no', nompro
398 > nbenti, nbvapr, imem(adlipr),
399 > nnoeho, nnoeca, jaux,
400 > lgnoin, nnoein, imem(adtra1),
402 > ulsort, langue, codret )
406 elseif ( typgeo.eq.edtri3 .or. typgeo.eq.edtri6 ) then
408 if ( codret.eq.0 ) then
411 #ifdef _DEBUG_HOMARD_
412 write (ulsort,texte(langue,3)) 'UTTBRC-tr', nompro
415 > lgtrin, ntrein, nbenti, imem(adtra1),
416 > ulsort, langue, codret)
420 if ( codret.eq.0 ) then
424 #ifdef _DEBUG_HOMARD_
425 write (ulsort,texte(langue,3)) 'UTPR02-tr', nompro
428 > nbenti, nbvapr, imem(adlipr),
429 > ntreho, ntreca, jaux,
430 > lgtrin, ntrein, imem(adtra1),
432 > ulsort, langue, codret )
436 elseif ( typgeo.eq.edqua4 .or. typgeo.eq.edqua8 ) then
438 if ( codret.eq.0 ) then
439 cgn write (ulsort,*) 'nquein'
440 cgn write (ulsort,91020) (nquein(iaux), iaux = 1 , lgquin)
443 #ifdef _DEBUG_HOMARD_
444 write (ulsort,texte(langue,3)) 'UTTBRC-qu', nompro
447 > lgquin, nquein, nbenti, imem(adtra1),
448 > ulsort, langue, codret)
452 if ( codret.eq.0 ) then
456 #ifdef _DEBUG_HOMARD_
457 write (ulsort,texte(langue,3)) 'UTPR02-qu', nompro
460 > nbenti, nbvapr, imem(adlipr),
461 > nqueho, nqueca, jaux,
462 > lgquin, nquein, imem(adtra1),
464 > ulsort, langue, codret )
472 if ( codret.eq.0 ) then
474 call gmlboj ( ntrav1 , codret )
478 c 3.4. ==> transfert en fonction du support
480 if ( codret.eq.0 ) then
482 jaux = advalr - 2 + iaux1 + nrocmp - kaux
484 c 3.4.1. ==> sur les noeuds
486 cgn 1792 format(3i10,g15.7)
487 if ( typgeo.eq.0 ) then
489 if ( option.eq.1 .and. degre.eq.1 ) then
491 do 3411 , iaux = 1 , nbtrvi
493 cgn print 1792,nntrvi(3,iaux),nnoeca(nntrvi(3,iaux)),
494 cgn > imem( adpcan + nnoeca(nntrvi(3,iaux))-1),
495 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(3,iaux))-1))
496 cgn print *,kaux*imem(adpcan+nnoeca(nntrvi(3,iaux))-1)
497 cgn print 1792,nntrvi(4,iaux),nnoeca(nntrvi(4,iaux)),
498 cgn > imem( adpcan + nnoeca(nntrvi(4,iaux))-1),
499 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(4,iaux))-1))
500 cgn print 1792,nntrvi(5,iaux),nnoeca(nntrvi(5,iaux)),
501 cgn > imem( adpcan + nnoeca(nntrvi(5,iaux))-1),
502 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(5,iaux))-1))
503 fotrva(iaux) = unstr * (
504 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(3,iaux))-1)) +
505 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(4,iaux))-1)) +
506 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(5,iaux))-1)) )
507 cgn print 1789,iaux,fotrva(iaux)
510 do 3412 , iaux = 1 , nbquvi
511 cgn if ( ( nnquvi(2,iaux).ge.27713 .and.
512 cgn > nnquvi(2,iaux).le.27716 ) .or.
513 cgn > ( nnquvi(2,iaux).ge.27725 .and.
514 cgn > nnquvi(2,iaux).le.27728 ) .or.
515 cgn > nnquvi(2,iaux).eq.17127 .or.
516 cgn > nnquvi(2,iaux).eq.17198) ) then
517 cgn print *,' ',iaux,' (',nnquvi(2,iaux),')'
518 cgn print 1792,nnquvi(3,iaux),nnoeca(nnquvi(3,iaux)),
519 cgn > imem(adpcan+nnoeca(nnquvi(3,iaux))-1),
520 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(3,iaux))-1))
521 cgn print 1792,nnquvi(4,iaux),nnoeca(nnquvi(4,iaux)),
522 cgn > imem(adpcan+nnoeca(nnquvi(4,iaux))-1),
523 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(4,iaux))-1))
524 cgn print 1792,nnquvi(5,iaux),nnoeca(nnquvi(5,iaux)),
525 cgn > imem(adpcan+nnoeca(nnquvi(5,iaux))-1),
526 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(5,iaux))-1))
527 cgn print 1792,nnquvi(6,iaux),nnoeca(nnquvi(6,iaux)),
528 cgn > imem(adpcan+nnoeca(nnquvi(6,iaux))-1),
529 cgn > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(6,iaux))-1))
531 foquva(iaux) = unsqu * (
532 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(3,iaux))-1)) +
533 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(4,iaux))-1)) +
534 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(5,iaux))-1)) +
535 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(6,iaux))-1)) )
536 cgn if ( ( nnquvi(2,iaux).ge.27713 .and.
537 cgn > nnquvi(2,iaux).le.27716 ) .or.
538 cgn > ( nnquvi(2,iaux).ge.27725 .and.
539 cgn > nnquvi(2,iaux).le.27728 ) .or.
540 cgn > nnquvi(2,iaux).eq.17127 .or.
541 cgn > nnquvi(2,iaux).eq.17198) ) then
542 cgn print 1789,iaux,foquva(iaux)
546 elseif ( option.eq.1 .and. degre.eq.2 ) then
548 do 3413 , iaux = 1 , nbtrvi
549 fotrva(iaux) = unssix * (
550 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(4,iaux))-1)) +
551 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(4,iaux))-1)) +
552 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(5,iaux))-1)) +
553 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(7,iaux))-1)) +
554 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(8,iaux))-1)) +
555 > rmem(jaux+kaux*imem(adpcan+nnoeca(nntrvi(9,iaux))-1)) )
558 do 3414 , iaux = 1 , nbquvi
559 foquva(iaux) = unshu * (
560 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(3,iaux))-1)) +
561 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(4,iaux))-1)) +
562 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(5,iaux))-1)) +
563 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(6,iaux))-1)) +
564 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(8,iaux))-1)) +
565 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(9,iaux))-1)) +
566 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(10,iaux))-1)) +
567 > rmem(jaux+kaux*imem(adpcan+nnoeca(nnquvi(11,iaux))-1)) )
572 do 3415 , iaux = 1 , nbenti
573 fotrva(iaux) = rmem(jaux+kaux*imem(adpcan+nnoeca(iaux)-1))
578 c 3.4.2. ==> fonction exprimee sur les triangles
580 elseif ( typgeo.eq.edtri3 .or. typgeo.eq.edtri6 ) then
582 if ( option.eq.1 ) then
584 c 3.4.2.1. ==> une valeur constante par element
586 if ( ngauss.eq.1 ) then
588 do 3421 , iaux = 1 , nbtrvi
589 cgn print *,iaux,nntrvi(2,iaux),ntreca(nntrvi(2,iaux)),
590 cgn > imem(adpcan+ntreca(nntrvi(2,iaux))-1)
591 fotrva(iaux) = rmem( jaux +
592 > kaux*imem(adpcan+ntreca(nntrvi(2,iaux))-1) )
593 cgn print 1789,iaux,fotrva(iaux)
598 c 3.4.2.2. ==> plusieurs valeurs par element (points de Gauss)
600 daux1 = 1.d0/dble(ngauss)
602 iaux2 = jaux - nbtafo
603 do 3422 , iaux = 1 , nbtrvi
606 > + kaux*imem(adpcan+ntreca(nntrvi(2,iaux))-1)
607 do 34221 , iaux1 = 1 , ngauss
608 daux2 = daux2 + rmem(iaux3+iaux1*nbtafo )
610 fotrva(iaux) = daux1*daux2
617 write (ulsort,texte(langue,7))
621 c 3.4.3. ==> fonction exprimee sur les quadrangles
623 elseif ( typgeo.eq.edqua4 .or. typgeo.eq.edqua8 ) then
625 if ( option.eq.1 ) then
627 c 3.4.3.1. ==> une valeur constante par element
629 if ( ngauss.eq.1 ) then
631 do 3431 , iaux = 1 , nbquvi
632 cgn write (ulsort,90015) 'foquva(', iaux,')',nnquvi(2,iaux),nqueca(nnquvi(2,iaux)),
633 cgn > imem(adpcan+nqueca(nnquvi(2,iaux))-1)
634 foquva(iaux) = rmem( jaux +
635 > kaux*imem(adpcan+nqueca(nnquvi(2,iaux))-1) )
636 cgn print 1789,iaux,foquva(iaux)
641 c 3.4.3.2. ==> plusieurs valeurs par element (points de Gauss)
643 daux1 = 1.d0/dble(ngauss)
645 iaux2 = jaux - nbtafo
646 do 3432 , iaux = 1 , nbquvi
649 > + kaux*imem(adpcan+nqueca(nnquvi(2,iaux))-1)
650 do 34321 , iaux1 = 1 , ngauss
651 daux2 = daux2 + rmem(iaux3+iaux1*nbtafo )
653 foquva(iaux) = daux1*daux2
660 write (ulsort,texte(langue,7))
670 if ( codret.eq.0 ) then
672 call gmlboj ( obpcan, codret )
684 if ( codret.ne.0 ) then
688 write (ulsort,texte(langue,1)) 'Sortie', nompro
689 write (ulsort,texte(langue,2)) codret
693 #ifdef _DEBUG_HOMARD_
694 write (ulsort,texte(langue,1)) 'Sortie', nompro