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