d4.06.06 Structures de données champ_no_s et cham_elem_s#
Résumé:
Ce document décrit les structures de données cham_no_s et cham_elem_s.
On donne également la liste des principaux utilitaires travaillant sur ces structures de données.
On définit deux nouvelles SD : cham_no_set cham_elem_squi contiennent les mêmes informations que les SD cham_noet cham_elemmais qui sont plus “simples”à manipuler dans le fortran.
Il existe des utilitaires permettant de transformer un cham_noen cham_no_s(et réciproquement) (de même pour les cham_elem).
Ces SD seront donc en général des SD temporaires permettant de travailler plus simplement.
- Remarque importante
Les SD cham_no_s et cham_elem_s ne sont pas aussi générales que les SD cham_no et cham_elem. Pour les cham_no_s, on ne décrit que les champs portés par les nœuds du maillage (et pas les éventuels nœuds tardifs), Pour les cham_elem_s, on ne décrit que les champs portés par les éléments finis dont la maille support est une maille du maillage (et non une maille tardive)
Table des Matières
SD cham_elem_s#
Description de la SD#
Cette structure de données permet de représenter les valeurs des champs discrétisés sur les mailles d’un maillage.
Plus précisément, l’accès à une valeur réelle (ou complexe, …) du champ se fait en précisant :
le numéro de la maille supportant l’élément fini (IMA),
le numéro du point dans la maille (IPT),
le numéro du sous-point dans le point (ISP) (ISP=1en général),
le numéro de la composante de la grandeur associée au champ (ICMP),
cham_elem_s (K19) ::= record
♦'.CESK' : OJB S V K8 long = 3
♦'.CESD' : OJB S V I long = 5 + 4*nb_MAILLE
♦'.CESC' : OJB S V K8 long = nb_CMP
♦'.CESV' : OJB S V /R/C/I/... long = nbval
♦'.CESL' : OJB S V L long = nbval
Objet .CESK#
.CESK(1) |
mailla: nom du maillage sous-jacent au cham_elem_s. |
.CESK(2) |
nomgd: nom de la grandeur associée au cham_elem_s(“DEPL_R”, “SIEF_R”, …) |
.CESK(3) |
/”ELNO”: champ connu aux nœuds des éléments, /”ELGA”: champ connu aux points de Gauss des éléments, /”ELEM”: champ constant par élément (on dira alors qu’il est connu au centre de gravité) |
Objet .CESD#
.CESD(1) |
nb_MAILLE: nombre de mailles du maillage sous-jacent. |
.CESD(2) |
nb_CMP: nombre de CMPS portées par les points. C’est la dimension de l’objet .CESC |
.CESD(3) |
nbptmx: maximum du nombre de points portés par les mailles |
.CESD(4) |
nbspmx: maximum du nombre de sous-points portés par les points des mailles |
.CESD(5) |
nucmpmx: numéro d’ordre le plus élevé des CMPS possibles du cham_elem_s (dans l’ordre de l’objet .CESC) |
.CESD(5+4*(ima-1)+1) |
nbpt(ima): nombre de points de la maille ima. |
.CESD(5+4*(ima-1)+2) |
nbsp(ima): nombre de sous-points de la maille ima. |
.CESD(5+4*(ima-1)+3) |
nbcmp(ima): numéro maximum des CMPS portées par les sous-points des points de la maille ima. |
.CESD(5+4*(ima-1)+4) |
IAD(ima): IAD+1 est l’adresse dans les objets .CESL et .CESV de la 1ere CMP du 1er sous-point du 1er point de la maille ima (s’ils existent) |
Objet .CESC#
.CESC(icmp) |
cmp_i: nom de la ième CMP du cham_elem_s |
- Remarque
L’ordre des CMPS dans .CESC peut être quelconque. On n’est pas obligé de respecter l’ordre du catalogue des grandeurs. En revanche, les CMPS doivent faire partie des CMPS de la grandeur nomgd (exception faite de la grandeur VARI_R).
Objets .CESL et .CESV#
Ces objets contiennent les valeurs du cham_elem_s (.CESV) et des booléens (.CESL) indiquant si ces valeurs ont été affectées (ou si elles sont indéterminées).
Le type JEVEUX (R/C/I/K8,…) de l’objet .CESV est celui de la grandeur nomgd.
La dimension de ces 2 vecteurs est nbval :
nbval est la somme sur toutes les mailles ima de nbpt(ima) x nbsp(ima) x nbcmp(ima).
pour accéder à la ICMP-ème CMP du ISP-ème sous-POINT du IPT-ème POINT de la IMA-ème MAILLE d’un cham_elem_s, on utilise la routine utilitaire CESEXI:
CALL CESEXI(STOP,JCESD,JCESL,IMA,IPT,ISP,ICMP,IAD)
où : JCESD et JCESL sont les adresses des objets .CESD et .CESL du cham_elem_s.
IAD est la « sortie » de cette routine.
si IAD > 0 , cela veut dire que la composante recherchée existe dans le cham_elem_s. On peut alors la récupérer par : VALEUR = ZR(JCESV-1+IAD) (si le champ est réel).
si IAD < 0 , cela veut dire que la composante recherchée a une place possible dans le cham_elem_s mais qu’elle pas affectée actuellement. On peut alors affecter une valeur dans le cham_elem_s en faisant :
ZR(JCESV-1+IAD) = VALEUR
ZR(JCESL-1+IAD) = .TRUE.
si IAD = 0 , cela veut dire que la composante recherchée n’a pas de place possible dans le cham_elem_s. C’est à dire que l’une au moins des conditions suivantes est vérifiée :
IMA > nb_MAILLE
IPT > nbpt(IMA)
ISP > nbSP(IMA)
ICMP > nbcmp(IMA)
Exemple de boucle sur les valeurs d’un cham_elem_s#
call jeveuo(ces//'.CESD', 'l', jcesd)
call jeveuo(ces//'.CESL', 'l', jcesl)
call jeveuo(ces//'.CESV', 'l', jcesv)
nbma = zi(jcesd-1+1)
do ima = 1,nbma
nbpt = zi(jcesd-1+5+4*(ima-1)+1)
nbsp = zi(jcesd-1+5+4*(ima-1)+2)
nbcmp = zi(jcesd-1+5+4*(ima-1)+3)
do ipt = 1,nbpt
do isp = 1,nbsp
do icmp = 1,nbcmp
call cesexi(stop, jcesd, jcesl, ima, ipt, isp, icmp, iad)
if (iad.gt.0) then
valeur = zr(jcesv-1+iad)
endif
end do
end do
end do
end do
Routines utilitaires#
.
CARCES |
transformer une carteen un cham_elem_s |
CELCES |
transformer un cham_elemen cham_elem |
CESCES |
changer la discrétisation d’un cham_elem(ELNO/CART/ELGA) |
CESCNS |
transformer un cham_elem_sen un cham_no_s |
CESCRE |
créer un cham_elem_s |
CESEXI |
tester l’existence d’une CMPd’un point d’une maille d’un cham_elem_s |
CESRED |
“réduire” un cham_elem_ssur une liste de mailles et/ou une liste de CMPS. |
CESTAS |
“retasser” le contenu d’un cham_elem_s |
CNOCNS |
transformer un cham_noen cham_no_s |
CNSCES |
transformer un cham_no_sen cham_elem |
CNSCNO |
transformer un cham_no_sen cham_no |
CNSCRE |
créer un cham_no_s |
CNSPRJ |
projeter un cham_no_ssur un autre maillage |
CNSRED |
“réduire” un cham_no_ssur une liste de nœuds et/ou une liste de CMPS. |
COPISD |
copier un cham_no_sou un cham_elem_s |
DETRSD |
détruire un cham_no_sou un cham_elem_s |
IMPRSD |
imprimer sur listing un cham_no_sou un cham_elem_s |