[updated 4.Feb.2010]
Librairie calelem > Fichier calinb.f |
SUBROUTINE CALINB (MIXTE,NDIM,NDMDOM,NBTRDO,INDTRD,NCHDON,NOMDON
& ,POIDQ,ELTDIF,POIN,JACOBF
& ,NBC,WC,DWC
& ,NBL,WL,DWL,MCMATR,MCMATC
& ,IST,RST,CST,NODONA,NOMFCT,IMPFCH)
Auteur : D.Martin (Octobre 1988)
Derniere modification : D.Martin (04 fevrier 2010)
Version 9 : D.Martin (04 fevrier 2010)
Calcul des integrales elementaires sur un domaine de dimension inferieure
a la dimension d'espace, en un point de quadrature et ne necessitant pas
d'extension (integrales sans derivees ou avec derivees tangentielles)
-- Arguments (voir aussi Calelb) --
MIXTE indice de mixite des interpolations en ligne/colonne
NDIM dimension d'espace
NDMDOM dimension du domaine de calcul
NBTRDO nombre de termes a calculer sur le domaine
INDTRD structure locale de description des termes du domaine
Contenu du tableau INDTRD pour le terme numero NUTRDO
(NUTRDO) niveau, puis adresse absolue du terme dans RST,CST
(NUTRDO+ NBTRDO) adresses relatives des matrices elementaires
dans le tableau des matrices elementaires du bon type
(NUTRDO+ 2*NBTRDO) adresses relatives des tableaux locaux de valeurs
nodales dans le tableau des matrices elementaires
(NUTRDO+ 3*NBTRDO) indice de type de declaration REEL ou COMPLEXE du terme
(NUTRDO+ 4*NBTRDO) indice de type de calcul (ITYCAL)
(NUTRDO+ 5*NBTRDO) numero d'integrand (NUKALE)
(NUTRDO+ 6*NBTRDO) nombre de composantes de l'inconnue en colonne
(NUTRDO+ 7*NBTRDO) type d'interpolation de l'inconnue en colonne
(NUTRDO+ 8*NBTRDO) nombre de noeuds de l'inconnue en colonne
ou nombre de fonctions propres (inconnue spectrale)
(NUTRDO+ 9*NBTRDO) nombre de composantes de l'inconnue en ligne
(NUTRDO+10*NBTRDO) type d'interplation de l'inconnue en ligne
(NUTRDO+11*NBTRDO) nombre de noeuds de l'inconnue en ligne
ou nombre de fonctions propres (inconnue spectrale)
(NUTRDO+12*NBTRDO) numero de donnee affectee si cette donnee est de type
FONCTION ou TABLEAU
(NUTRDO+13*NBTRDO) type de la donnee associee (CONSTANTE,FONCTION,TABLEAU)
(NUTRDO+14*NBTRDO) niveau ou numero de la donnee affectee au terme (NIVDON)
(NUTRDO+15*NBTRDO) type du resultat de la donnnee associee (REEL,COMPLEXE)
(NUTRDO+20*NBTRDO) niveau d'impression du terme
de plus si la donnee affectee au terme est un tableau ou une fonction
(NUTRDO+16*NBTRDO) adresse du tableau associe au terme ou
de la constante ou du tableau associe a la fonction
(NUTRDO+17*NBTRDO) type (CONSTANTE ou TABLEAU) associe a la fonction
(NUTRDO+18*NBTRDO) type du resultat (REEL, COMPLEXE) associe a la fonction
(NUTRDO+19*NBTRDO) nombre de composantes par noeud pour une donnee
associee de type TABLEAU
NCHDON nombre de caracteres par nom de donnee
NOMDON tableau #OMDON des noms de donnees
POIDQ poids de quadrature au point de quadrature en cours
ELTDIF element d'integration (element de surface ou de longueur)
POIN tableau de travail contenant les coordonnees de l'image du point
de quadrature dans l'element courant,
suivi de la norme et des composantes du vecteur normal unitaire
NBC nombre de d.l. (de la face ou arete) de l'element en colonne
WC valeurs des fonctions de base pour l'interpolation en colonne
DWC derivees des fonctions de base pour l'interpolation en colonne
NBL nombre de d.l. (de la face ou arete) de l'element en ligne
WL valeurs des fonctions de base pour l'interpolation en ligne
DWL derivees des fonctions de base pour l'interpolation en ligne
MCMATR adresse du tableau des matrices elementaires reelles
MCMATC adresse du tableau des matirces elementaires complexes
IST super-tableau entier
RST super-tableau reel
CST super-tableau complexe
NODONA chaine de caractere receptrice d'un nom de donnee
NOMFCT chaine de caractere receptrice d'un nom de fonction
IMPFCH unite logique d'impression si non nul (pas d'impression si nul)
IMPLICIT NONE
CHARACTER*(*) NODONA,NOMFCT
CHARACTER NOMDON(*)
INTEGER MIXTE,NDIM,NDMDOM,NBTRDO,NCHDON,NBC
& ,NBL,MCMATR,MCMATC,IMPFCH
& ,INDTRD(*),IST(*)
REAL POIDQ,POIN(*),JACOBF(NDIM,*),ELTDIF
& ,WL(*),WC(*),DWC(NDMDOM,*),DWL(NDMDOM,*)
& ,RST(*)
COMPLEX CST(*)
Variables locales
CHARACTER DONINT*9,TYPINT*12,TYPE*12
INTEGER INTYKL
INTEGER NUTRDO,ITYPTR,KINTEG,ITYCAL,ALPHA,BETA,GAMMA,DELTA
& ,NCPINC,INTINC,NBFPRC,NCPINL,INTINL,NBFPRL
& ,NIVIMP,IMPINT,NUDONN,MCADRR,MCADRC,ADRTRM
Pour dimensionner le tableau en cas de coefficient variable.
LGCOFX doit etre >= NDIMX*NDIMX et >= NBFPRX
NDIMX dimension maximum (3)
NBFPRX nombre maximum de fonctions propres dans la methode
des elements finis localises avec integration numerique
INTEGER NDIMX,NBFPRX,LGCOFX
PARAMETER ( NDIMX = 3, NBFPRX = 100, LGCOFX = NBFPRX )
REAL COFVAR(LGCOFX)
COMPLEX COFVAC(LGCOFX)
CALL PRFXMJ (1,'*CalInb*')
Boucle sur les Integrands elementaires
DO 3000 NUTRDO=1,NBTRDO
Type de calcul ('ELFINI' ou 'ELFLQU') du terme courant
ITYCAL=INDTRD(NUTRDO+ 4*NBTRDO)
Numero d'integrand
KINTEG=INDTRD(NUTRDO+ 5*NBTRDO)
IF (KINTEG.LE.0) GOTO 3000
Adresse relative pour l'integrale elementaire dans le tableau des
matrices elementaires
ADRTRM=INDTRD(NUTRDO+ NBTRDO)
Indicateur de type de declaration de l'integrale elementaire
ITYPTR=INDTRD(NUTRDO+ 3*NBTRDO)
Nombre de composantes pour l'inconnue en colonne
NCPINC=INDTRD(NUTRDO+ 6*NBTRDO)
Nombre de composantes pour l'inconnue en ligne
NCPINL=INDTRD(NUTRDO+ 9*NBTRDO)
Numero de donnee affectee a l'integrale elementaire
NUDONN=INDTRD(NUTRDO+12*NBTRDO)
Niveau d'impression pour l'integrale elementaire
NIVIMP=INDTRD(NUTRDO+20*NBTRDO)
Type REEL ou COMPLEXE de l'integrale elementaire
TYPE =TYPINT (ITYPTR) !utilite
IMPINT=0
IF (NIVIMP.GT.0) IMPINT=IMPFCH
Adresse pour l'integrale elementaire
MCADRR=MCMATR-1+ADRTRM
MCADRC=MCMATC-1+ADRTRM
COFVAR(1)=1.
COFVAC(1)=1.
IF (ITYCAL.EQ.INTYKL('ELFLQU')) THEN
Cas d'une integrale de la methode des elements finis localise
avec integration numerique
IF (NUDONN.LE.0) CALL ERINTG (100,1) !utilite
Type de l'inconnue en colonne
INTINC=INDTRD(NUTRDO+ 7*NBTRDO)
Nombre de fonctions propres pour l'inconnue en colonne
NBFPRC=INDTRD(NUTRDO+ 8*NBTRDO)
Type de l'inconnue en ligne
INTINL=INDTRD(NUTRDO+10*NBTRDO)
Nombre de fonctions propres pour l'inconnue en ligne
NBFPRL=INDTRD(NUTRDO+11*NBTRDO)
IF (INTINC.EQ.-1.AND.INTINL.EQ.-1) THEN
Cas d'une inconnue Spectrale en colonne et en ligne
IF (NBFPRL.GT.NBFPRX)
& CALL BAISE('Parameter NBFPRX sous-estime.')
On suppose meme inconnue en ligne et en colonne
Calcul des fonctions spectrales au point de quadrature
CALL CALCOP (NDIM,NBTRDO,INDTRD,POIN,NBFPRL
& ,MCMATR,MCMATC,NUTRDO,NUDONN,NCHDON
& ,NOMDON,NODONA,NOMFCT,IST,RST,CST
& ,COFVAR,COFVAC)
Calcul de l'integrand a inconnue 'Spectrale' en colonne
et inconnue 'Spectrale' en ligne
CALL FSPEC2 (NBFPRL,NBFPRC,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC)
& ,IMPINT)
ELSEIF (INTINC.EQ.-1) THEN
Cas d'une inconnue Spectrale en colonne
IF (NBFPRC.GT.NBFPRX)
& CALL BAISE('Parameter NBFPRX sous-estime.')
Calcul des fonctions spectrales au point de quadrature
CALL CALCOP (NDIM,NBTRDO,INDTRD,POIN,NBFPRC
& ,MCMATR,MCMATC,NUTRDO,NUDONN,NCHDON
& ,NOMDON,NODONA,NOMFCT,IST,RST,CST
& ,COFVAR,COFVAC)
Calcul de l'integrand a inconnue 'Spectrale' en colonne
et a inconnue 'Valeurs Nodales' en ligne
CALL FSPECW (NBL,WL,NCPINL,NBFPRC,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC)
& ,IMPINT)
ELSEIF (INTINL.EQ.-1) THEN
Cas d'une inconnue Spectrale en ligne
IF (NBFPRL.GT.NBFPRX)
& CALL BAISE('Parameter NBFPRX sous-estime.')
Calcul des fonctions spectrales au point de quadrature
CALL CALCOP (NDIM,NBTRDO,INDTRD,POIN,NBFPRL
& ,MCMATR,MCMATC,NUTRDO,NUDONN,NCHDON
& ,NOMDON,NODONA,NOMFCT,IST,RST,CST
& ,COFVAR,COFVAC)
Calcul de l'integrand inconnue 'Valeurs Nodales' en colonne
et inconnue 'Spectrale' en ligne
CALL FSPECW (NBC,WC,NCPINC,NBFPRL,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC)
& ,IMPINT)
ELSE
CALL ERINTG (103,1)
ENDIF
GOTO 3000
ENDIF
Integrand contenant un coefficient variable ?
IF (NUDONN.GT.0)
& CALL CALCOV (NDIM,NBTRDO,INDTRD,POIN,NBC,WC,MCMATR,MCMATC
& ,NUTRDO,TYPE,NUDONN,NCHDON,NOMDON,NODONA
& ,NOMFCT,IST,RST,CST,COFVAR,COFVAC)
IF (NCPINC.LE.1.AND.NCPINL.LE.1) THEN
Integrands a inconnues scalaires
GOTO (1001,1999,1999,1999,1005,1999) KINTEG
IF (KINTEG.EQ.307) GOTO 1307
IF (KINTEG.EQ.313) GOTO 1313
GOTO 1999
-- Integrand V
1001 CALL WISCA (NBL,WL
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- Integrand UV
1005 CALL WWISCA (MIXTE,NBL,WL,NBC,WC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- dU/dt.dV/dt (2d seulement)
1307 CALL DTWDTW (NBL,DWL,NBC,DWC,NDMDOM
& ,POIDQ/ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- Integrand GRADGRADTG Produit scalaire des gradients tangentiels
1313 CALL GRTGRT (MIXTE,NBL,DWL,NBC,DWC,NDIM,NDMDOM,JACOBF
& ,POIDQ/ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
ELSE
Integrands a inconnues vectorielles
GOTO (2001,2999,2999,2999,2005) KINTEG
GOTO (2040,2999,2042,2042,2042,2042,2042,2042,2042,2042
& ,2042) KINTEG-39
GOTO (2203,2203,2203,2203,2203,2203) KINTEG-202
GOTO (2301,2302,2999,2999,2999,2999,2999,2999,2999,2310
& ,2311,2312,2999) KINTEG-300
GOTO 2999
(F.V) (produit scalaire)
2001 CALL WIVEC (NBL,WL,NCPINL
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- (U.V) (produit scalaire)
2005 CALL WWIVEC (MIXTE,NBL,WL,NCPINL,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- U^V (produit vectoriel) (2d)
2040 CALL WVW (MIXTE,NBL,WL,NCPINL,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- UaVb
2042 CALL INTNOS (KINTEG,ALPHA,BETA,GAMMA,DELTA)
IF (ALPHA.EQ.BETA) THEN
CALL WAWA (MIXTE,ALPHA,NBL,WL,NCPINL,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
ELSE
CALL WAWB (MIXTE,BETA,NBL,WL,NCPINL,ALPHA,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
ENDIF
GOTO 3000
-- Ua V ou U Va (produit d'une composante d'une inconnue vectorielle
par un inconnue scalaire)
2203 CALL INTNOS (KINTEG,ALPHA,BETA,GAMMA,DELTA)
IF (ALPHA.GT.0) THEN
CALL WAW(MIXTE,ALPHA,NBL,WL,NCPINL,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
ELSE
CALL WWA(MIXTE,BETA,NBL,WL,NCPINL,NBC,WC,NCPINC
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
ENDIF
GOTO 3000
-- (V.N) (produit scalaire par la normale)
2301 CALL WN (NBL,WL,NCPINL,POIN(NDIM+2)
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- (V^N) (produit vectoriel par la normale) (2d)
2302 CALL WVN (NBL,WL,NCPINL,POIN(NDIM+2)
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- (U^N.V^N) (produit scalaire de produits vectoriels)
2310 CALL WVNWVN (MIXTE,NBL,WL,NCPINL,NBC,WC,NCPINC,POIN(NDIM+1)
& ,POIN(NDIM+2),POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- (U.N)(V.N) (produit de produits scalaires)
2311 CALL WNWN (MIXTE,NBL,WL,NCPINL,NBC,WC,NCPINC,POIN(NDIM+2)
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
-- (U.N)V
2312 CALL WNV (NBL,WL,NBC,WC,NCPINC,POIN(NDIM+2)
& ,POIDQ*ELTDIF,TYPE
& ,COFVAR,RST(MCADRR),COFVAC,CST(MCADRC),IMPINT)
GOTO 3000
---------------------------------------------------------------
ENDIF
3000 CONTINUE
CALL PRFXMJ (-1,'*CalInb*')
RETURN
1999 CALL ERINTG (15,KINTEG)
2999 CALL ERINTG (16,KINTEG)
-- File history
Version 9 : D.Martin (04 fevrier 2010)
- ajout d'un GOTO 3000 apres l'appel de WIVEC (bug anterieur a octobre 2006)
Version 8 : D.Martin (10 novembre 2009)
- ajout du cas d'une inconnue variationnelle vectorielle pour les termes
elements finis localises
- ajout integrales de bord a inconnues vectorielles U_{alpha}V et UV_{alpha}
Version 7 : D. Martin & E. Luneville (26 mars 2009)
- bug d'argument (POIDQ*ELTDIF au lieu de POIDQ/ELTDIF) à l'appel de DTWDTW
Version 6 : D.Martin & C.Chambeyron (2 octobre 2006)
- ajout du calcul de matrices spectrales en ligne et colonne (Fspec2)
Version 5 : D.Martin (6 octobre 2005)
- ajout des integrales de bord a inconnues vectorielles U_{alpha}V_{beta}
Version 4 : D.Martin (23 juin 2005)
Version 3 : D.Martin (4 mai 2004)
- ajout de nouveaux integrands
Version 2.0.7 : D.Martin (20 juin 2003)
END !CalInb
calinb est appelé dans (5 procédures)