****************************************************************************************** ************* E l i m i n a t i o n d' u n e C e l l u l e *************************** ****************************************************************************************** On part des blocs rangés sous les IC, et on fabrique la CtAB' permettant d'effectuer l'élimination de la Cellule. ..... | Cl > ``|`| | \_ | D |->| CtAB' | | ..... | F > ''|'' | ....... ...... | IC1 | -> | IC2 | |'''|'' '''''' | \_ | Ct_SV | | \__ | ABt_TV | en suivant un triple schéma : extraction, opération, ventilation Préliminaires, format des blocs de départ et notations ====================================================== Restriction sur le vecteur d'Etat de la cellule ............................................... On introduit un vecteur Eta' (fortran EtaP) qui rassemble l'ensemble des composantes de Eta connectées à un plug (SV); il y correspond la notion d'un bord (edge) de la cellule. On note Eta' = U{SV} union des SV. Ces composantes ordonnées en ordre croissant correspondent aux colonnes (resp. ligne) des matrices intermédiaires de l'extraction : Ct' (resp. AB'). Le bank SV devra fournir cette information. Restriction sur les interfaces (IC) ................................... On introduit de même une IC' (ICP) qui rassemble les composantes des transferts connectés à une SV ayant une influence sur Eta. Ceci exclue donc les T-Probes; pour les autres (TV), on note IC' = U{TV} union des TV connectés à cette SV. Cette union ne comporte pas de composantes répétées dans la mesure où on impose qu'un transfert plusieurs fois connecté à une cellule ne puisse l'être que via des SV différentes. De manière abstraite, on aura quand même des IC', mais de dimension nulle, qui rassemble des T-Probes - comme les T-Probes sont des TV de dimension nulle. Attention, une IC' est une liste de composantes de transferts dans l'ordre de leur liste telle quelle est donnée dans les TV. A chaque item de cette liste correspond une colonne de AB', matrice construite lors de l'extraction de ABt_TV Restriction de la matrice D ........................... On n'a pas encore traité du problème de l'extraction de D' à ajouter à la CtAB' Remarque : on envisage d'introduire une autre catégorie de transfert de type paramètre; .......... ces derniers sont nécessaires pour les études de sensibilité paramétriques. Dans la mesure ou ils n'interviennent pas directement dans les résultats de simulation, on envisage de les ranger sous des faces spécifiues. Pour les paramètres de cellules, ils sont à inclure dans les IC'; par contre, ils sont nons réactifs et n'ont pas lieu d'apparaitre dans les lignes de la Ct'. Leur prise en compte dans la navette reste à définir. ****************************************************************************************** ************* E x t r a c t i o n ****************************************************** ****************************************************************************************** ----------- PARTIE Ct ----------- On part des blocs Ct_SV de cette SV/IC; dimension : dimEta_SV x U Tr{IC}. pedago : une IC représente en effet un sous-ensemble des transferts connectés à cette SV; ce sous-ensemble (face de la cellule) est structuré par des règles externes (IN,IX). On fabrique une Ct' pour la cellule, de dimension dimEta' x U Tr{IC}. pedago : cette matrice représente donc l'influence directe des composantes de Eta' sur l'ensemble des transferts connectés via l'ensemble des SV de la cellule (Influence des bords sur l'extérieur). Rq: il peut y avoir des composantes de Tr répétées, à travers x IC. <.SV1.> < .SV3. > Under Cl <.SV2.> < loop on : Fc I<---<->--->----------I < |/////// |IC1 loop on : IC |.....................| f1 < | \\\\\\\ |IC2 acces a un bloc Ct_SV | \\\\\\\ | loop on : lignes de Ct_SV |---------------------| < | //////////| f2 loop on : composantes de la ligne | //////////| < passage de # col(Eta_SV) a # col(Eta') de Ct' I---------------------I copie/somme(*) < Eta' > > ....... Ct' ........... > > <-Eta'=Union des SV---> > ordonnee > (*) copie avec somme après raz pour laisser aux utilisateurs la possibilité d'appliquer un proceseur de transfert ajoutant des contributions en provenance de plusieurs cellules dans des conditions ou ces cellules sont en realité la même : il faut bien alors sommer les composantes de Ct : dPhi_j = Sum_i [ Ct(i,j)*dEta_SV_i ] = cas particliuer = Sum_i [ Ct(i,j) ]*dEta_SV explicitation cf ./Extract_CtP ----------- PARTIE AB ----------- On part de banks ABt_TV de dimension dimEta x dimIC' (avec IC' == U TV <-o-> IC comme on l'a définit ci-dessus). pedago : [A]^-1 fait en effet réagir l'ensemble des composantes de Eta à l'environnement définit par les seules composantes des tr connectés se présentant à la cellule dans des TV. On n'a ainsi pas besoin de "voir" les T-Probes. On fabrique une AB' (non transposée, mais voir (*)), couplant toutes les composantes de la cellule sensibles (Eta') à l'environnement (U TV); ce bloc est uniquement destiné au calcul du produit Ct.A-1B. dimension = dim U IC' x dim Eta' Rq: a priori, il ne devrait pas y avoir de composantes de Tr répétées, car un Tr multiplement connecté à une cellule doit l'être via différents SV. (et on a une seule SV par IC) .... A-1B' ........ Under Cl < loop on : Fc f1 f2 f3 < I<-------><----><-->I loop on : IC |.IC1.IC2. . | < |TVTVTVTV. . | acces a un bloc ABt_TV | . . | loop on : lignes de ABt_TV | . . | < | . . | Eta' loop on : composantes de la ligne | . . | < passage/extraction # col (Eta) | . . | a # ligne (Eta') de AB' | . . | copie/somme (**) |TV| | || . | > I<-|--|-|><----><-->I > IC1' IC2' > dans le désordre des listes > des TV > En ce qui concerne la descente de la navette, le calcul de AB.dFi est peu coûteux, et on utilisera directement les blocs ABt_TV. (*) rien n'empêche cependant, pour des raisons d'optimisation, de la prendre transposée, car les bibliothèques de l'algèbre linéaires permettent tout aussi bien de la manipuler. (**) somme à partir d'une raz car rien n'interdit à un utilisateur de répéter une composante de Eta dans des SV différentes, voire dans la même SV. explicitation : cf ./Extract_ABP ----------- PARTIE D ----------- On pourrait partir de blocs D_TV rangés sous chaque IC de dimension dim{IC'}*dim{IC}. L'extraction {de D', de même dimensions que CtAB') consisterait donc simplement à botteler ces blocs. Remarques générales sur l'extraction : -------------------------------------- 1/ tant pour D' que pour les autres, on pourra envisager différentes formes comtractées de matrice, selon notre nouvelle philosophie : traiter spécifiquement chaque cas particulier au mieux de ses intérêts. 2/ le nouveau bank ABt_TV est déjà contracté par rapport à l'actuel : non seulement la ABt_TV contiend les T-Probes, mais le vecteur transfert complet chaque fois qu'il apparait dans une IC ! Pour un transfert radiatif de type PNE, la cellule se satisfait d'une seule composante, alors qu'elle voyait les mille et comme on a une cellule par composante de ce transfert (aux bords près) on stockait dimEta * 999*1000 zéros. En ce qui concerne la D_TV, si seuls d'autres transferts sont interdépendants via cette cellule, elle ne devrait pas être concernée par ce transfert millepattes. Celà reste à préciser. ****************************************************************************************** ************* P R O D U I T ************************************************************* ****************************************************************************************** Le résultat CtAB' = Ct' x AB', de dimension dim U{IC'} x dim U{IC}, est rangé sous la cellule. Selon la proposition ci-dessous, ce bank pourrait comporter la somme avec D'. Exemple avec : SUBROUTINE SGEMM ( OA, OB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC ) 'n' Alpha*[A] (*) [B] (+) Beta*[C]; 't'ou'c' Alpha*[A]_t (*) 't' (*) [B]_t (+) Beta*[C]; Op(A) : M rows as [C] [A] real A(LDA,*) Op(B) N cols as [C] [B] real B(LDB,*) [C} real C(LDC,*) Op(A) K cols as OpB rows CALL SGEMM ( 'n','n', dim(IC), dim{IC'}, dimEta', -1., Ct',-, AB',-, 1., D',-) mais vérifier rangement / convention ****************************************************************************************** ************* V e n t i l a t i o n ****************************************************** ****************************************************************************************** Le problème consiste à ranger par blocs la CtAB' d'une cellule dans les matrices de la famille englobante. Ces matrices sont au nombre de 4, correspondant a 4 bk Fm-|MXT>, dans l'ordre : (f_f), (f_x), (x_f), (x_x) pedago : Chacune est structurée par les interfaces (IN,IX). On va donc utiliser cette structure, qui est également connue pour les CtAB', pour le rangement/ventilation; à un bloc terminal <-o-> un bk MX, les MX d'une rangée chaînés sous un bk MXR (row) de MXT. (c'est ce passage de la structure IC de la cellule a la structure IN,IX de la famille qui définit la ventilation, et qui était décrite par les cross-reference tables CDXTB, CDXTE... de la version actuelle) Les interfaces sont numerotées dans la famille, mais il y a des blocs INixINj vides; et parmi ceus qui sont présents, la cellule n'aura à en remplir qu'une partie : on a donc besoin d'une numérotation des blocs à remplir vus de la cellules, et d'une table de passage de cette numérotation à celle de la famille. De plus, les colonnes de CtAB' sont structurées en IC', cad les composantes des Tr, avec possible répétition, constituant les TV connectant la cellule à son environnement. Il faut donc une table donnant la position des colonnes de IC' dans le bloc IN.IN d'arrivée. (ou IN.IX etc, on explicite seulement le rangement dans la première matrice (f_f) de la Fm) Sous la famille : ! boucles dans la structure par blocs loop on : Blignes de CtAB' < ! identification du MXR cible (une Bligne <-o-> une IN) passage # IN{Cl} bloc de CtAB' a # IN{Fm}<-o->MXR Table loop on Blocs de la Bligne < id du MX bk cible Table ! boucles sur les composantes scalaires loop on : lignes d'un bloc INj x INi < passage # ligne CtAB' a IN.IN Table loop on composantes < passage # col CtAB' a IN.IN Table copie/somme > > > > Fc 1 Fc2 Fc3 Fc1/Cl IC1' IC2' IC3' IC4' IC5'... IC1 | IC2 I - - - - - I - - - - - I - - - - X | | |colonne m .IC1 , , I | | | . Fc1 . , , I | | | . t . , , I | | | . a .IC2 , I | | | . b I - - - - - I - - - - - I - - - - X ( Table ICi -> INj ) . l .IC3 , , I | | j=NBCR(i)| . e . , , I | | | . Fc2 .IC4 , Cl2 , I | | | . m . , , I | | | . i . , , I // | | . V I - - - - - I - - - - - I - - - - X //| V | . n=IC(m) .IC5 , , I // V Fci/Fm V . Fc3 . , , Cl3 I //IN1 IN2 IN3 . . , , I // . . . . , , I // . . V pour rappel seult : X X X X X X I X X X X X I X X X X X / - |- - -.- - - - . - - n - - -CDXTB(1)=1 // I . . I (2)= // I . . I (3)=(LCL).Nb_St_Var IC1 ----------------------------- //>IN1I . . I (4)=nFc // I . . . . . . . ... . . . . .I +1 =(Fc).IC_Nb // I . . I +2 =0 IN2I . . I +3 =(Fc).Nb_Var I . . I I . . . . . . . . . . . . . .I I . . I IC2 ------ 3 = NBCR(2) ------------- >IN3I . . I ligne k..........................> l . . X I <-- scalaire cible table k->l=IR(k) I . . I (n,l) - - - - - - - - - - - - - - - <-----------> ISIZE(kFa) La même table sert à passer de la numérotation interne à la Cl (ICi->INj à celle des INj IXj de la Fm, par ligne ou par colonnes blocs (table NBCR(i). Par contre, les colonnes ne comportant pas les T-Probes, il faut deux tables scalaires de passage : la première pour passer des TV-listes à sa colonne de IFup la deuxième pour tenir compte des transferts non-ordonnés par cette IFup (LeBug) explicitation, cf < ./Vent_CtABP !!!***************************************************************************************** On a deux logiques de parcourt des blocs de CtAB' qui s'opposent : la plus naturelle vue du rangement actuel des natrice privilégie le parcourt des MX d'une BRow (cf boucles ci-dessus), alors que la dissymétrie ligne colonnes de CtAB' favorise le parcourt colonne par colonne. Il serait peut-être bien d'expliciter la première voie, alors que l'on explicite la seconde. *****************************************************************************************!!! Remarque concernant la conservation de la matrice du problème couplant tous les transferts; ........................................................................................... La notion de IX est complètement liée à l'arbre ZOOM. Elle rassemble en réalité des sous-ensembles de IN qui seules constituent les blocs de la matrice "Somme des CtAB". Dans le cas où on veut exporter cette matrice, ou l'utiliser complète pour d'autres méthodes de résolution que l'algorithme emboité présent, il faudra prévoir une ventilation complémentaire. ****************************************************************************************** ************* A n a l y s e / Objectifs initiaux **************************************** ****************************************************************************************** Par rapport aux objectifs, on a éliminé les lignes de zéros de la ABt_TV stokée; après l'extraction, le produit matriciel est standard (plus de pairing banks pour apparier les lignes de l'un des opérandes aux colonnes de l'autre); enfin, la ventilation fait appel à des tables fixes et échappe ainsi à la création à chaque élimination des cross-reference tables, abandonnant ainsi leur encription salace, voire dévergondée (banks CTX,CTXB,CTXE et idem r0ws). Les tables de rangement permettent l'existence de Tr ou IC nons consécutifs sous une IN (ou IX), et Le Bug n'a plus l'occasion de s'exprimer. Dans les traitements ci-dessus, on n'a pas envisagé les cas particuliers, comme les matrices compactées (Ct_TV_SV et ABt_SV_TV); en ajoutant dans les boucles intérieures l'exploration de la sous-structure IC/Cx/TV des Fc, on peut exploiter sans changement de méthode ces cas particuliers, tenir compte des composantes bien rangées etc. Le stokage de la matrice D pouttait suivre les mêmes conventions : une D_TV de dim {IC'}x{IC} sous chaque IC; il suffirait de botteler(*) pour obtenir D' de dim identique au résultat de CtAB'; on effecturait alors la somme D'+CtAB'dans la partie "opération". ********* PERSPECTIVES ************* Enfin (jyg dixit) ce schéma d'Extraction a ce grand avantage de concrètiser la structure IN.IX d'un sous-arbre; la ventilation correspond alors à un changement d'espace vectoriel lié à l'inclusion de ce sous-arbre dans un sous-arbre supérieur : pourquoi donc ne pas le systématiser lors de l'élimination des familles ? On peut en effet faire un // entre les triple-opérations : Cl [A] ABt_TV AB' Ct_SV Ct' D_TV D' - CtAB' ventilation->4MXT-MXR-MX EtaxIC' ICxEta' IC'xIC IC->Fc->IFup Fm [f] (f-x) (x-f) (x-x) - (xfx) id ->4MXT-MXR-MX INxIN INxIX IXxIN IX-IX IX->Fc->IFup sauf qu'actuellement, les 4 matrices de base ne sont pas concretisées; l'idée à étudier est donc de les bâtir pour effectuer une "opération de Schur"=(x-x)-(x-x)[f]-1(f-x) avant de ventiler. Cette opération est bien súr massivement parallelisable, en amputant l'arbre complet d'un niveau. (*) botteler (des radis) : en Anglais "to bunch"; "to bunch one's skirt" : retrousser sa jupe.