[updated 2.Jun.1998]
Librairie sdexplo > Fichier rploca.f |
SUBROUTINE RPLOCA (NDIM,NDMDOM,NCPINC,NBNE,NORMAL,LOCREP)
Auteur : D.Martin (Mai 1997)
Derniere modification : D.Martin (29 Mai 1998)
Creation des reperes locaux sur un domaine, par completion en une base
orthornormee du vecteur normal unitaire
-- Arguments --
NDIM dimension d'espace
NDMDOM dimension du domaine
NCPINC nombre de composantes pour l'inconnue
NBNE nombre de noeuds
NORMAL tableau des normales
LOCREP tableau des reperes locaux resultat
INTEGER NDIM,NCPINC,NDMDOM,NBNE
REAL NORMAL(NDIM,*),LOCREP(NCPINC,NCPINC,*)
INTEGER NE,I,J
REAL N1,N2,N3,RN1,RN2,RN3,RMAX,RNORM
IF (NDIM.EQ.2) THEN
IF (NDMDOM.EQ.1) THEN
DO 20 NE=1,NBNE
Vecteur normal = n
N1=NORMAL(1,NE)
N2=NORMAL(2,NE)
LOCREP(1,1,NE)=N1
LOCREP(2,1,NE)=N2
Vecteur tangent t avec det(n,t) = +1
LOCREP(1,2,NE)=-N2
LOCREP(2,2,NE)=+N1
20 CONTINUE
ELSE
DO 22 NE=1,NBNE
LOCREP(1,1,NE)=1.
LOCREP(2,1,NE)=0.
LOCREP(1,2,NE)=0.
LOCREP(2,2,NE)=1.
22 CONTINUE
ENDIF
IF (NCPINC.GT.NDIM) THEN
Pour une inconnue a 3 composantes en 2D (alteration provisoire)
DO 29 NE=1,NBNE
LOCREP(3,1,NE)=0.
LOCREP(3,2,NE)=0.
LOCREP(1,3,NE)=0.
LOCREP(2,3,NE)=0.
LOCREP(3,3,NE)=1.
29 CONTINUE
ENDIF
ELSEIF (NDIM.EQ.3) THEN
IF (NDMDOM.EQ.2) THEN
DO 30 NE=1,NBNE
Vecteur normal: n
N1=NORMAL(1,NE)
N2=NORMAL(2,NE)
N3=NORMAL(3,NE)
LOCREP(1,1,NE)=N1
LOCREP(2,1,NE)=N2
LOCREP(3,1,NE)=N3
premier vecteur tangent: t1
RN1=1.-N1*N1
RN2=1.-N2*N2
RN3=1.-N3*N3
RMAX=MAX (RN1,RN2,RN3)
RNORM=SQRT(RMAX)
IF (RMAX.EQ.RN1) THEN
LOCREP(1,2,NE)= 0.
LOCREP(2,2,NE)= N3/RNORM
LOCREP(3,2,NE)=-N2/RNORM
ELSEIF (RMAX.EQ.RN2) THEN
LOCREP(1,2,NE)= N3/RNORM
LOCREP(2,2,NE)= 0.
LOCREP(3,2,NE)=-N1/RNORM
ELSEIF (RMAX.EQ.RN3) THEN
LOCREP(1,2,NE)= N2/RNORM
LOCREP(2,2,NE)=-N1/RNORM
LOCREP(3,2,NE)= 0.
ENDIF
second vecteur tangent: t2 avec det (n,t1,t2)=+1
CALL PROEXT (NDIM,LOCREP(1,1,NE),LOCREP(1,3,NE)) !utilite
30 CONTINUE
ELSEIF (NDMDOM.EQ.0) THEN
DO 35 NE=1,NBNE
DO 34 I=1,NDIM
DO 33 J=1,NDIM
LOCREP(I,J,NE)=0.
33 CONTINUE
LOCREP(I,I,NE)=1.
34 CONTINUE
35 CONTINUE
ENDIF
ENDIF
END !RpLoca
rploca est appelé dans